pyinstaller打包python项目遇到的问题

关于PyInstaller打包遇到的一些问题及解决方法

在复现完nerfstudio之后,我基于gradio做了一个将nerfstudio的各种功能集成到一个web端的项目,并将其嵌入到pyqt中,打包为桌面应用。以下就是我使用PyInstaller打包项目时遇到的一些问题,并给出了对应的解决方法,希望能够为大家提供一点小小的帮助。

  1. AttributeError: Failed to retrieve attribute compiled from module pydantic
    图1
    原因:pyinstaller包和pydantic包不兼容,把pydantic的代码稍作修改就好
    解决方案:点击跳转

  2. 打包过程中pyisntaller终止并给出以下提示
    在这里插入图片描述
    解决方法:把import sys ; sys. setrecursionLimit(sys . getrecursiontimit()★5)添加到运行pyinstaller后生成的.spec文件中,再次打包时运行pyinstaller myprog. spec,myprog.spec就是所生成的.spec文件

  3. pyinstaller打包FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\vip\\AppData\\Local\\Temp\\_MEI152562\\gradio_client\\types.json'
    我的项目是一个基于gradio并使用pyqt开发的一个桌面应用
    解决方法:点击跳转

  4. OSError: Can't get source for <function fisheye624_project at 0x000002E2121FC310>. TorchScript requires source access in order to carry out compilation, make sure original .py files are available.
    解决方法:点击这里跳转
    把以下代码片加入到主文件的开头就行

def script_method(fn, _rcb=None):
    return fn
def script(obj, optimize=True, _frames_up=0, _rcb=None):
    return obj
import torch.jit
script_method1 = torch.jit.script_method
script1 = torch.jit.script
torch.jit.script_method = script_method
torch.jit.script = script
  1. OSError: Could not find compatible tinycudann extension for compute capability 75.
    tinycuda是我在复现nerfstudio时安装的一个库,也就是我之前的博客提到的。这里需要把tinecudann相关的库都给添加到打包文件中
    解决方法:点击跳转
    使用--add-data命令将tinycudann依赖文件都打包进去:pyinstaller -w -F -i Icon_of_exe.ico --splash splash_picture.png --collect-data=gradio_client --collect-data=gradio --add-data "E:\Anaconda\envs\ns\Lib\site-packages\tinycudann-1.7-py3.8-win-amd64.egg;." webui_Chinese2.py
  2. ValueError: Cannot load imports from non-existent stub 'C:\\Users\\vip\\AppData\\Local\\Temp\\_MEI255762\\skimage\\__init__.pyi'
    解决方案:增加hook-skimage.py
  3. ModuleNotFoundError: No module named 'skimage.data._fetchers'
    解决方法:点击跳转
    将pyInstaller-hooks-contrib更新到2023.10
  4. error: unrecognized arguments: --multiprocessing-fork
    解决方法:点击跳转
  5. PermissionError:[WinError 5]拒绝访问
    在这里插入图片描述
    这个报错表明没有权限,以管理员权限打开cmd然后打包就可以了。
    解决方法:点击跳转
  6. OSError: [Errno 22] Invalid argument
Traceback (most recent call last):
  File "c:\Entwicklung\FP-Creator\env311\Lib\site-packages\PyInstaller\isolated\_parent.py", line 372, in call
    return isolated.call(function, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Entwicklung\FP-Creator\env311\Lib\site-packages\PyInstaller\isolated\_parent.py", line 293, in call
    ok, output = loads(b64decode(self._read_handle.readline()))
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
EOFError: EOF read where object expected

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "c:\Entwicklung\FP-Creator\env311\Scripts\pyinstaller.exe\__main__.py", line 7, in <module>
  File "c:\Entwicklung\FP-Creator\env311\Lib\site-packages\PyInstaller\__main__.py", line 194, in _console_script_run
    run()
  File "c:\Entwicklung\FP-Creator\env311\Lib\site-packages\PyInstaller\__main__.py", line 180, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "c:\Entwicklung\FP-Creator\env311\Lib\site-packages\PyInstaller\__main__.py", line 61, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "c:\Entwicklung\FP-Creator\env311\Lib\site-packages\PyInstaller\building\build_main.py", line 981, in main
    build(specfile, distpath, workpath, clean_build)
  File "c:\Entwicklung\FP-Creator\env311\Lib\site-packages\PyInstaller\building\build_main.py", line 903, in build
    exec(code, spec_namespace)
  File "FloodPlainCreator.spec", line 23, in <module>
    a = Analysis(
        ^^^^^^^^^
  File "c:\Entwicklung\FP-Creator\env311\Lib\site-packages\PyInstaller\building\build_main.py", line 415, in __init__
    self.__postinit__()
  File "c:\Entwicklung\FP-Creator\env311\Lib\site-packages\PyInstaller\building\datastruct.py", line 173, in __postinit__
    self.assemble()
  File "c:\Entwicklung\FP-Creator\env311\Lib\site-packages\PyInstaller\building\build_main.py", line 699, in assemble
    isolated.call(find_binary_dependencies, list(self.binaries), self.binding_redirects, collected_packages)
  File "c:\Entwicklung\FP-Creator\env311\Lib\site-packages\PyInstaller\isolated\_parent.py", line 371, in call
    with Python() as isolated:
  File "c:\Entwicklung\FP-Creator\env311\Lib\site-packages\PyInstaller\isolated\_parent.py", line 247, in __exit__
    self._write_handle.flush()
OSError: [Errno 22] Invalid argument

在网上找了很久没有找到解决方法,后来在GitHub上的一个issue中找到了解决方法。找到了自己的虚拟环境所在路径,然后找到pyinstaller包的安装路径,再找到一个名为build_main.py的文件。比如我的路径是E:\Anaconda\envs\ns\Lib\site-packages\PyInstaller\building\build_main.py,以记事本方式打开该文件,找到如下代码:

for package in import_packages:
            try:
                __import__(package)
            except Exception:
                pass

在try前面增加print(packages):

for package in import_packages:
            print(package)
            try:
                __import__(package)
            except Exception:
                pass

然后重新执行Pinstaller打包的命令行,看在出现报错的时候,是在哪个包那里停止的,然后把该包pip uninstall 包名就可以了。

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值