pyinstaller ImportError 错误 - 如何解决?

pyinstaller ImportError error - how to solve it?

我已经在我的 Linux 中安装了 pyinstaller,以便为我的 Python 脚本创建一个可执行文件,该脚本使用以下命令正常运行:

python3 exemplo.py

但是当我执行下面的命令时:

pyinstaller --onefile example.py

我收到以下错误:

File "/home/pedro/.local/bin/pyinstaller", line 11, in <module>
     sys.exit(run())   File "/home/pedro/.local/lib/python2.7/site-packages/PyInstaller/__main__.py",
line 79, in run
    import PyInstaller.building.build_main   File "/home/pedro/.local/lib/python2.7/site-packages/PyInstaller/building/build_main.py",
line 33, in <module>
   from ..depend import bindepend   File "/home/pedro/.local/lib/python2.7/site-packages/PyInstaller/depend/bindepend.py",
line 26, in <module>
    from . import dylib, utils   File "/home/pedro/.local/lib/python2.7/site-packages/PyInstaller/depend/utils.py",
line 25, in <module>
     from ..lib.modulegraph import util, modulegraph   File "/home/pedro/.local/lib/python2.7/site-packages/PyInstaller/lib/modulegraph/util.py",
line 16, in <module>
     from ._compat import StringIO, BytesIO, get_instructions, _READ_MODE   File "/home/pedro/.local/lib/python2.7/site-packages/PyInstaller/lib/modulegraph/_compat.py",
line 29, in <module>
     from dis3 import get_instructions ImportError: No module named dis3

怎么了?

我尝试安装 dis3:

python3 -m pip install --user dis3

但我仍然得到同样的错误。

我卸载了它...

python -m pip uninstall pyinstaller

按照建议重新安装。

python3 -m pip install --user pyinstaller

我已经设置了 PATH 变量:

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin:/home/pedro/.local/bin

现在我收到消息:

pedro@pedro-pc:~/Documents/instabot/instabot_c.py$ python -m pyinstaller --onefile example.py
/usr/bin/python: No module named pyinstaller

确实...它没有出现在 pip 列表中:

pedro@pedro-pc:~/Documents/instabot/instabot_c.py/__pycache__$ pip list
/home/pedro/.local/lib/python2.7/site-packages/pip/_vendor/requests/__init__.py:83: RequestsDependencyWarning: Old version of cryptography ([1, 2, 3]) may cause slowdown.
  warnings.warn(warning, RequestsDependencyWarning)
Package        Version               
-------------- ----------------------
altgraph       0.16.1                
arandr         0.1.9                 
beautifulsoup4 4.4.1                 
certifi        2018.10.15            
chardet        3.0.4                 
cryptography   1.2.3                 
defer          1.0.6                 
enum34         1.1.2                 
fake-useragent 0.1.11                
future         0.17.1                
html5lib       0.999                 
idna           2.7                   
ipaddress      1.0.16                
lxml           3.5.0                 
macholib       1.11                  
numpy          1.11.0                
pefile         2018.8.8              
pip            18.1                  
psutil         3.4.2                 
pyasn1         0.1.9                 
pycurl         7.43.0                
Pygments       2.1                   
pygobject      3.20.0                
pyOpenSSL      0.15.1                
pysqlite       2.7.0                 
python-apt     1.1.0b1+ubuntu0.16.4.2
python-debian  0.1.27                
pyxdg          0.25                  
requests       2.20.0                
scour          0.32                  
setuptools     20.7.0                
six            1.10.0                
urllib3        1.24                  
wheel          0.29.0   

怎么了?

您的项目是 python3,但是 pyinstaller 运行 在 python2.7 上从 python3

的 2.7 安装中删除了包

从 python2.7

卸载 pyinstaller
pip uninstall pyinstaller

为 python3

安装 pyintaller
pip3 install pyinstaller

如果你想把这个包用于 python2.7 和 3 这个代码 运行 pyinstaller on python3

python3 -m pyinstaller --onefile example.py

我遵循了这个 link 的说明:Python Issue 它解决了我提到的最后一个问题。

pip 和 pip3 将调用不同的 python 解释器(分别为 2.7 和 3)。

同样 python 和 python3 也不同,如果您使用 "pip3 install pyinstaller" 现在您调用 "python -m pyinstaller",您的解释器正在搜索 pyinstaller点列表!相反,你想做 "python3 -m pyinstaller" 然后它应该工作。

当您使用时:

pyinstaller --onefile example.py

您的 pyinstaller 是使用 pip 安装在 python2.7 中的,因此它找不到名为 dis3 的模块,您可能在 pip3 列表 (python3) 中找到了该模块。

这里有另一种设置pyinstaller的方法,这样就可以直接在linux中使用"pyinstaller yourfile.py"了。

1) git 克隆 https://github.com/pyinstaller/pyinstaller

2) cd pyinstaller,然后 cd 进入 bootloader

3) 运行 “python3 ./waf distclean all” 为您的系统构建引导加载程序。

4) 构建引导加载程序后,输入:“python3 setup.py install”

5) 这个应该已经安装好了pyinstaller。在终端中输入 pyinstaller 并点击 进入。它应该识别命令,但它会抱怨更多参数。

6) 使用命令 "pyinstaller yourfile.py" 创建可执行文件。

如果你想创建一个独立的可执行文件使用:"pyinstaller --onefile yourfile.py"

希望对您有所帮助!