美文网首页
[Python] 非常规使用venv遇到奇葩问题,解决后发现奇葩

[Python] 非常规使用venv遇到奇葩问题,解决后发现奇葩

作者: _Walker__ | 来源:发表于2023-11-21 10:07 被阅读0次

    1、移动venv目录后pip无法使用

    venv中有几个文件记录的最开始创建venv时的路径,如果要移动需要把这几个地方都改掉:
    1)activate脚本

    activate中记录的venv路径
    1. pip的可执行文件


      pip中记录的venv路径

    从这一点可以看出venv虚拟环境里的pip不是个正经的二进制可执行文件,它大概率是一个创建venv时生成的压缩包。


    2、将另一个venv中安装的模块动态引入后,直接运行脚本正常;用PyInstaller打包exe后出现各种模块找不到

    2.1 dll加载不到

    ImportError: DLL load failed while importing cv2: 找不到指定的模块。
    

    解决:将另一个venv的Scripts目录作为DLL加载目录

    os.add_dll_directory('Xxx/venv/Scripts')
    

    2.2 一堆模块找不到

    ModuleNotFoundError: No module named 'http.cookies'
    

    解决:PyInstaller打包时,把这些缺失的模块都添加到collect-all列表里。

    2.3 sympy模块明明存在,却还是导入失败

    [WARNING][torch._guards] No sympy found
    
    Traceback (most recent call last):
      File "main.py", line 51, in main
    ...
      File "D:\AIGC\SD\venv\Lib\site-packages\torch\_guards.py", line 78, in <module>
        class ShapeGuard(NamedTuple):
      File "D:\AIGC\SD\venv\Lib\site-packages\torch\_guards.py", line 79, in ShapeGuard
        expr: sympy.Expr
    NameError: name 'sympy' is not defined
    

    这里真正失败的原因其实给torch的异常捕获给丢弃了!
    遇到这种明明看上去没问题,却又无法正常导入的情况,可以在自己的脚本里导入这个模块,再启动就能看到更多的错误信息:

    ModuleNotFoundError: No module named 'colorsys'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
    ...
      File "D:\AIGC\SD\venv\Lib\site-packages\sympy\__init__.py", line 24, in <module>
        raise ImportError("SymPy now depends on mpmath as an external library. "
    ImportError: SymPy now depends on mpmath as an external library. See https://docs.sympy.org/latest/install.html#mpmath for more information.
    

    到这里其实跟2.2的问题是一样的,缺少系统库的模块。

    就这样一点点补,总会把环境补全。这一波补的系统库有下面这些:
    http.cookieshtml.parserpickletoolscolorsystimeitmodulefinderxml.etree.ElementTree

    相关文章

      网友评论

          本文标题:[Python] 非常规使用venv遇到奇葩问题,解决后发现奇葩

          本文链接:https://www.haomeiwen.com/subject/pfrbwdtx.html