web-dev-qa-db-ja.com

Pycharmでビルドされたプロジェクトのpyinstallerを実行するときにvenvディレクトリからの依存関係を含める方法は?

PythonとPyCharmは初めてです。OSXHighSierraで実行しています。

Lxmlを使用するプロジェクトをPyCharmで作成しました。プロジェクトの依存関係としてlxml4.1.1をインストールしましたが、myProject/venv/lib/site-package/lxmlの下にファイルが表示されています。

PyCharm内からスクリプトを問題なく実行できますが、lxmlライブラリを含む実行可能ファイルをビルドできませんでした。

コマンドラインからpyinstaller3.3.1を使用します。プロジェクトはビルドされますが、実行可能ファイルを実行すると、出力用に彼を取得します。

トレースバック(最後の最後の呼び出し):ImportErrorのファイル "analyze.py"、13行目: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/lxmlanalyze.py pyinstaller --onefileanalyze.py

それは役に立たなかった。

7
George

最後にそれを解決し、同じボートの他の人のためにここに投稿しました:

Virtualenvを使用していてビルドを実行する場合は、virtualenvディレクトリのsite-packagesディレクトリを指すように環境変数PYTHONPATHを追加する必要があることがわかりました。私の場合、次のようになります。

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

便宜上、これをvirtualenvによって作成されたアクティブ化ファイルに追加したので、virtualenvをアクティブ化すると自動的に設定されます。また、非アクティブ化セクションに「未設定のPYTHONPATH」を追加しました。

Virtualenvが環境をセットアップするときにこれが自動的に行われると、非常に役立ちます。

9
George

ジョージによって提供された答えは私を正しい方向に導きましたが、私は別の道を選びました;)

--pathsコマンドラインオプション( ここ を参照)を使用して、site-packagesディレクトリの場所を示しました。これで解決しました。私はWindowsを使用していて、単一の実行可能ファイルが必要だったので、これがコマンドラインです

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