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

2023-11-21  本文已影响0人  _Walker__

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

上一篇下一篇

猜你喜欢

热点阅读