【问题标题】:How to include dependencies from venv directory when running pyinstaller for project built in Pycharm?在为 Pycharm 中构建的项目运行 pyinstaller 时,如何包含来自 venv 目录的依赖项?
【发布时间】:2018-07-23 07:14:51
【问题描述】:

我是 Python 和 PyCharm 的新手。我在 OSX High Sierra 上运行。

我在 PyCharm 中创建了一个使用 lxml 的项目。我已经安装了 lxml 4.1.1 作为项目依赖项,我可以在 myProject/venv/lib/site-package/lxml 下看到它的文件

我可以在 PyCharm 中运行我的脚本没问题,但我无法构建包含 lxml 库的可执行文件。

我从命令行使用 pyinstaller 3.3.1。项目构建,但是当我运行可执行文件时,我得到了他的输出:

Traceback(最近一次调用最后一次): 文件“analyze.py”,第 13 行,在 ImportError:没有名为 lxml 的模块 [4222] 执行脚本分析失败

我一直在寻找一些命令行开关,告诉 pyinstaller 在 venv 目录下包含依赖项,但没有成功。

任何帮助将不胜感激......

这是我的构建命令和输出:

pyinstaller --clean --onefile analyze.py
51 INFO: PyInstaller: 3.3.1
51 INFO: Python: 2.7.10
60 INFO: Platform: Darwin-17.4.0-x86_64-i386-64bit
60 INFO: wrote /Users/gludwig/PycharmProjects/XML_Analyzer/analyze.spec
66 INFO: UPX is not available.
66 INFO: Removing temporary files and cleaning cache in /Users/gludwig/Library/Application Support/pyinstaller
76 INFO: Extending PYTHONPATH with paths
['/Users/gludwig/PycharmProjects/XML_Analyzer',
 '/Users/gludwig/PycharmProjects/XML_Analyzer']
76 INFO: checking Analysis
76 INFO: Building Analysis because out00-Analysis.toc is non existent
76 INFO: Initializing module dependency graph...
79 INFO: Initializing module graph hooks...
130 INFO: running Analysis out00-Analysis.toc
138 INFO: Caching module hooks...
141 INFO: Analyzing /Users/gludwig/PycharmProjects/XML_Analyzer/analyze.py
2363 INFO: Loading module hooks...
2364 INFO: Loading module hook "hook-httplib.py"...
2364 INFO: Loading module hook "hook-encodings.py"...
2874 INFO: Looking for ctypes DLLs
2874 INFO: Analyzing run-time hooks ...
2879 INFO: Looking for dynamic libraries
2995 INFO: Looking for eggs
2995 INFO: Using Python library /System/Library/Frameworks/Python.framework/Versions/2.7/Python
2996 INFO: Warnings written to /Users/gludwig/PycharmProjects/XML_Analyzer/build/analyze/warnanalyze.txt
3009 INFO: Graph cross-reference written to /Users/gludwig/PycharmProjects/XML_Analyzer/build/analyze/xref-analyze.html
3087 INFO: checking PYZ
3087 INFO: Building PYZ because out00-PYZ.toc is non existent
3087 INFO: Building PYZ (ZlibArchive) /Users/gludwig/PycharmProjects/XML_Analyzer/build/analyze/out00-PYZ.pyz
3331 INFO: Building PYZ (ZlibArchive) /Users/gludwig/PycharmProjects/XML_Analyzer/build/analyze/out00-PYZ.pyz completed successfully.
3403 INFO: checking PKG
3403 INFO: Building PKG because out00-PKG.toc is non existent
3403 INFO: Building PKG (CArchive) out00-PKG.pkg
5669 INFO: Building PKG (CArchive) out00-PKG.pkg completed successfully.
5685 INFO: Bootloader /Users/gludwig/Library/Python/2.7/lib/python/site-packages/PyInstaller/bootloader/Darwin-64bit/run
5685 INFO: checking EXE
5685 INFO: Building EXE because out00-EXE.toc is non existent
5685 INFO: Building EXE from out00-EXE.toc
5686 INFO: Appending archive to EXE /Users/gludwig/PycharmProjects/XML_Analyzer/dist/analyze
5703 INFO: Fixing EXE for code signing /Users/gludwig/PycharmProjects/XML_Analyzer/dist/analyze
5716 INFO: Building EXE from out00-EXE.toc completed successfully.

此外,pyinstaller 在构建时会生成一个警告文件,它包含以下内容:

missing module named org - imported by copy
missing module named _sha512 - imported by hashlib
missing module named _sha256 - imported by hashlib
missing module named _md5 - imported by hashlib
missing module named _sha - imported by hashlib
missing module named 'org.python' - imported by pickle
missing module named _subprocess - imported by subprocess
missing module named msvcrt - imported by subprocess, getpass
missing module named riscosenviron - imported by os
missing module named riscospath - imported by os
missing module named riscos - imported by os
missing module named ce - imported by os
missing module named _emx_link - imported by os
missing module named os2 - imported by os
missing module named nt - imported by os, ntpath
missing module named _winreg - imported by mimetypes, urllib
missing module named OverrideFrom23 - imported by Carbon.Res
missing module named SOCKS - imported by ftplib
missing module named rourl2path - imported by urllib
missing module named lxml - imported by /Users/gludwig/PycharmProjects/XML_Analyzer/analyze.py

我也尝试过以这种方式将 venv 中的库条目的路径提供给 pyinstaller:

pyi-makespec --paths=~/PycharmProjects/XML_Analyzer \ 路径=~/PycharmProjects/XML_Analyzer/venv/lib/python2.7/sitepackages/lxml analyze.py pyinstaller --onefile analyze.py

没用。

【问题讨论】:

  • 从命令行运行pyinstaller时,是否先激活venv?
  • 是的。我的命令提示符上的 (venv) 前缀表示如下: (venv) i-IT-USA 10638:XML_Analyzer gludwig$

标签: python pycharm pyinstaller macos-high-sierra


【解决方案1】:

如果你使用spec文件,你可以这样添加:

a = Analysis(['myscript.py'],
             pathex=['.', ".\\path_to_libs", ".\\bla\\path_to_libs2"],
             hiddenimports=['pywinusb','CLogReport','otherLib'],
             ... )

如果您有多个文件和/或来自不同路径,这很有用。

【讨论】:

  • 分析从何而来?
  • 当你第一次在目录中运行 pyinstaller 时,它会输出一个模板 main.spec 文件。
【解决方案2】:

乔治提供的答案让我朝着正确的方向前进,但我选择了另一条路;)

我使用--paths 命令行选项(请参阅here)来指示站点包目录的位置,这为我解决了这个问题。 我正在使用 Windows 并且想要一个可执行文件,所以这是命令行

path\to\pyinstaller.exe --onefile --paths path\to\venv\Lib\site-packages file.py

【讨论】:

  • 添加到站点包的路径在我的情况下起到了作用,谢谢
【解决方案3】:

终于解决了,贴在这里给同船的其他人:

事实证明,当使用 virtualenv 并且您想要进行构建时,您必须添加环境变量 PYTHONPATH 以指向您的 virtualenv 目录的 site-packages 目录。就我而言,它看起来像这样:

PYTHONPATH="/Users/gludwig/PycharmProjects/XML_Analyzer/venv/lib/python2.7/site-packages"
export PYTHONPATH

为方便起见,我将它添加到由 virtualenv 创建的激活文件中,以便在我激活 virtualenv 时自动设置。我还在停用部分添加了“未设置 PYTHONPATH”。

如果在 virtualenv 设置环境时自动完成这将非常有帮助!

【讨论】:

    猜你喜欢
    • 2016-10-03
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2017-11-18
    相关资源
    最近更新 更多