Ubuntu:Pycharm venu Pyinstaller 打包问题OSError

文章描述了在使用PyInstaller构建Python应用时遇到的错误,原因在于缺少Python的共享库文件。提供了解决方案,包括在Debian/Ubuntu系统上安装Python3.8-dev开发包,以及针对自建Python环境的相应调整。

Traceback (most recent call last):
  File "/home/crrc/PycharmProjects/fengdian-bd/venv/bin/pyinstaller", line 8, in <module>
    sys.exit(_console_script_run())
  File "/home/crrc/PycharmProjects/fengdian-bd/venv/lib/python3.8/site-packages/PyInstaller/__main__.py", line 194, in _console_script_run
    run()
  File "/home/crrc/PycharmProjects/fengdian-bd/venv/lib/python3.8/site-packages/PyInstaller/__main__.py", line 180, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "/home/crrc/PycharmProjects/fengdian-bd/venv/lib/python3.8/site-packages/PyInstaller/__main__.py", line 61, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "/home/crrc/PycharmProjects/fengdian-bd/venv/lib/python3.8/site-packages/PyInstaller/building/build_main.py", line 1019, in main
    build(specfile, distpath, workpath, clean_build)
  File "/home/crrc/PycharmProjects/fengdian-bd/venv/lib/python3.8/site-packages/PyInstaller/building/build_main.py", line 944, in build
    exec(code, spec_namespace)
  File "/home/crrc/PycharmProjects/fengdian-bd/main.spec", line 7, in <module>
    a = Analysis(
  File "/home/crrc/PycharmProjects/fengdian-bd/venv/lib/python3.8/site-packages/PyInstaller/building/build_main.py", line 429, in __init__
    self.__postinit__()
  File "/home/crrc/PycharmProjects/fengdian-bd/venv/lib/python3.8/site-packages/PyInstaller/building/datastruct.py", line 184, in __postinit__
    self.assemble()
  File "/home/crrc/PycharmProjects/fengdian-bd/venv/lib/python3.8/site-packages/PyInstaller/building/build_main.py", line 764, in assemble
    self._check_python_library(self.binaries)
  File "/home/crrc/PycharmProjects/fengdian-bd/venv/lib/python3.8/site-packages/PyInstaller/building/build_main.py", line 834, in _check_python_library
    python_lib = bindepend.get_python_library_path()
  File "/home/crrc/PycharmProjects/fengdian-bd/venv/lib/python3.8/site-packages/PyInstaller/depend/bindepend.py", line 1018, in get_python_library_path
    raise IOError(msg)
OSError: Python library not found: libpython3.8.so.1.0, libpython3.8.so, libpython3.8mu.so.1.0, libpython3.8m.so, libpython3.8m.so.1.0
    This means your Python installation does not come with proper shared library files.
    This usually happens due to missing development package, or unsuitable build parameters of the Python installation.

    * On Debian/Ubuntu, you need to install Python development packages:
      * apt-get install python3-dev
      * apt-get install python-dev
    * If you are building Python by yourself, rebuild with `--enable-shared` (or, `--enable-framework` on macOS).

Solution:

 sudo apt-get install python3.8-dev

<think>嗯,用户的问题是关于在PyCharm中使用PyInstaller打包时无法包含simhei字体的问题。首先,我需要回忆一下PyInstaller的工作原理。PyInstaller会将Python代码及其依赖项打包成单个可执行文件,但有时候资源文件比如字体可能需要手动配置才能正确包含进去。用户提到的是simhei字体,这是一个中文字体,常用于避免中文显示乱码的问题。所以,关键点在于如何让PyInstaller打包过程中包含这个字体文件,并且在代码中正确加载它。根据之前的引用内容,用户可能已经尝试过使用PyInstaller的一些基本命令,比如添加多个-p参数指定路径,或者使用-F生成单个文件。但问题可能出在资源文件的路径处理上。PyInstaller需要明确知道哪些额外文件需要打包进去,并且代码中访问这些文件的路径在打包后可能需要调整。 接下来,我需要考虑几种方法来解决这个问题。首先,使用PyInstaller的--add-data选项来添加字体文件。这个选项可以将文件或目录包含到打包后的程序中。例如,在命令行中指定--add-data "simhei.ttf;.",这样字体文件会被复制到程序的根目录中。但是,用户是在PyCharm中使用,可能需要配置.spec文件或者在PyCharm的终端中直接运行命令。 另外,用户可能需要修改代码,使得在打包后程序能够正确找到字体文件。通常,打包后的程序会解压到一个临时目录中运行,所以资源文件的路径可能与开发时不同。可以使用sys._MEIPASS来获取临时目录的路径,从而正确加载字体。例如,在代码中添加:ifgetattr(sys, 'frozen', False):font_path= os.path.join(sys._MEIPASS,'simhei.ttf')else:font_path ='simhei.ttf'这样无论是在开发环境还是打包后,都能正确找到字体文件。然后,用户需要在PyInstaller的配置中指定包含这个字体文件。如果使用.spec文件,可以在datas部分添加元组('simhei.ttf', '.'),表示将字体文件放在根目录。或者,在命令行中使用--add-data参数,如前面所述。 此外,用户需要注意字体文件的路径是否正确。可能需要将simhei.ttf放在项目的根目录下,或者在代码中指定相对路径。如果字体文件不在项目目录中,PyInstaller可能无法找到它,导致打包后缺失。 最后,验证步骤也很重要。用户需要运行打包后的可执行文件,检查是否有字体相关的错误,或者用工具如ProcessExplorer查看是否包含simhei.ttf文件。如果仍然有问题,可能需要检查路径是否正确,或者是否有权限问题。总结一下,解决方案包括修改代码以适应打包后的路径,配置PyInstaller包含字体文件,以及正确设置文件路径。用户可能需要结合使用--add-data选项和代码中的路径处理来确保字体被正确包含。</think>在PyCharm中使用PyInstaller打包时包含SimHei字体的配置方法如下: ### 一、核心步骤 1. **字体文件放置** 将`simhei.ttf`文件复制到项目根目录下,或创建`fonts/`子目录存放(推荐后者以便管理) 2. **代码路径适配** 在Python代码中添加资源路径判断逻辑: ```python import sys import os if getattr(sys, 'frozen', False): base_path = sys._MEIPASS # 打包后的临时资源目录 else: base_path = os.path.dirname(__file__) font_path = os.path.join(base_path, 'fonts/simhei.ttf') # 根据实际路径调整 ``` 3. **打包配置方式** *方法一:命令行参数* 在PyCharm的终端执行(注意路径分隔符): ```shell pyinstaller -F -w main.py --add-data "fonts/simhei.ttf;fonts/" ``` *方法二:修改.spec文件* 在`datas`列表中添加: ```python a = Analysis( ... datas=[('fonts/simhei.ttf', 'fonts')], ... ) ``` ### 二、验证方法 1. 打包后检查生成目录中的`dist/`文件夹,确认存在字体文件副本 2. 使用Process Explorer工具检查运行时加载的资源 3. 通过调试输出检查实际加载的字体路径 ### 三、常见问题处理 1. **路径错误**:使用`os.path.exists(font_path)`验证路径有效性 2. **权限问题**:确保字体文件具有可读权限(chmod +r simhei.ttf) 3. **缓存问题**:清理`__pycache__`和`build/`目录后重新打包 ### 四、PyCharm集成配置 1. 创建打包配置模板: ```shell # File > Settings > Tools > Python Integrated Tools > Run Configurations pyinstaller -F -i icon.ico --add-data "fonts/*;fonts/" $FilePath$ ``` 2. 建议使用虚拟环境打包(参考引用[1]的纯净环境配置方法)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值