Python 3 虚拟环境 - 不存在的包

Python 3 Virtual Environment - nonexistent packages

我正在尝试创建一个虚拟环境来限制我正在创建的 exe 文件的大小。但是,当我创建一个虚拟环境时,它似乎仍然添加了我没有在所述环境中安装的包。

我尝试在导入 numpy 的地方做一个非常小的测试文件:

import numpy as np
A = np.array([0,0,1])
print(A)

当我创建我的虚拟环境和 运行 来自 cmd 的脚本时,它发现 numpy 没有安装在环境中,但是当我使用 pyinstaller 将测试脚本制作成 exe 文件时,不知何故它得到无论如何,numpy 混入其中...... 我的整个 cmd 程序在这里:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\MRCH>Virtualenv test_env
Using base prefix 'c:\anaconda3'
New python executable in C:\Users\MRCH\test_env\Scripts\python.exe
Installing setuptools, pip, wheel...done.

C:\Users\MRCH>test_env\scripts\activate

(test_env) C:\Users\MRCH\dist>pip list
Package    Version
---------- -------
pip        10.0.1
setuptools 39.2.0
wheel      0.31.1

(test_env) C:\Users\MRCH>python test.py
Traceback (most recent call last):
  File "test.py", line 1, in <module>
    import numpy as np
ModuleNotFoundError: No module named 'numpy'

(test_env) C:\Users\MRCH>pyinstaller test.py -y -F
454 INFO: PyInstaller: 3.3.1
...
132266 INFO: Appending archive to EXE C:\Users\MRCH\dist\test.exe
132473 INFO: Building EXE from out00-EXE.toc completed successfully.

(test_env) C:\Users\MRCH>cd dist

(test_env) C:\Users\MRCH\dist>test.exe
[0 0 1]

(test_env) C:\Users\MRCH\dist>

我做错了什么?

pyinstaller 从 pyinstaller docs 分析导入语句以收集依赖项。

您的问题似乎来自 pyinstaller 在 anaconda 目录中查找包。 您需要像这样明确排除包:

pyinstaller test.py -y -F --exclude numpy

或者像 建议的那样创建一个与 anaconda 分开的新虚拟环境。

这里是解决方案的简要总结。

1) 虚拟环境中的 Pyinstaller 我发现当我创建一个虚拟环境时,我应该做的第一件事就是安装 Pyinstaller。 如果我不这样做,它会包含大量来自虚拟环境外部的包。 (我不确定这是否真的发生了,但它确实解决了我的问题,所以如果有人对此有任何见解,请随时贡献)。

安装完 Pyinstaller 后,我安装脚本所需的包。

在这种情况下,即使只使用了 numpy,.exe 仍然非常大。

2) Anaconda VS clean Python 我安装了一个干净的 Python 32bit 并创建了一个独立于 Anaconda 的虚拟环境。这样就省略了很多来自 conda 环境的包,我设法将文件大小减小到原始大小的大约 1/10

UPX 当通过 UPX 使用干净的 python 压缩文件时,我遇到了很多 ImportError: DLL load failed 错误,我发现这是由于 UPX。当运行没有UPX的Pyinstaller时,没有错误发生,一切运行顺利。