1、移动venv目录后pip无法使用
venv中有几个文件记录的最开始创建venv时的路径,如果要移动需要把这几个地方都改掉:
1)activate
脚本
-
pip的可执行文件
从这一点可以看出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.cookies
、html.parser
、pickletools
、colorsys
、timeit
、modulefinder
、xml.etree.ElementTree