プロジェクトから.exeを作成しようとしていますが、外部ライブラリを含むlibサブパッケージを追加したため、py2exeが失敗するようです。
これが私のプロジェクトの設定方法です:
C:.
¦ LICENSE
¦ README.markdown
¦ requirements.txt
¦ run.sh
¦ setup.py
¦ TODO
¦
+---data
¦ +---input
¦ +---output
+---doc
¦
+---facemovie
¦ ¦ Eye.py
¦ ¦ Face.py
¦ ¦ Facemovie.py
¦ ¦ Facemoviefier.py
¦ ¦ FaceParams.py
¦ ¦ Guy.py
¦ ¦ training_types.py
¦ ¦ __init__.py
¦ ¦
¦ +---lib
¦ exif.py
¦ __init__.py
¦
+---test
context.py
exif_test.py
face_script.py
test_script.py
__init__.py
テストパッケージも、docフォルダーもdataフォルダーもexeに含めたくありません。私の実行可能ファイルのルートはfacemovieパッケージである必要があります。
setup.pyファイルを使用して実行可能ファイルを作成しようとしています。これは次のとおりです。
from distutils.core import setup
import py2exe, sys, os
import facemovie
sys.argv.append('py2exe')
setup(
name = "Facemovie",
url = "https://github.com/jlengrand/FaceMovie",
packages=['facemovie', 'facemovie.lib'],
options = {'py2exe': {'bundle_files': 1, 'includes': ['numpy', 'facemovie.lib.exif'] } },
console=['facemovie/Facemoviefier.py'],
zipfile = None,
)
ご覧のとおり、私のアプリケーションのメインエントリファイルはFacemovifier.pyです。libサブパッケージを追加するまで、すべてが正常に実行されていました。
py2exeコマンドを実行すると、出力の一部が次のようになります。
running install
running build
running build_py
copying facemovie\Eye.py -> build\lib\facemovie
copying facemovie\Face.py -> build\lib\facemovie
copying facemovie\Facemovie.py -> build\lib\facemovie
copying facemovie\Facemoviefier.py -> build\lib\facemovie
copying facemovie\FaceParams.py -> build\lib\facemovie
copying facemovie\Guy.py -> build\lib\facemovie
copying facemovie\training_types.py -> build\lib\facemovie
copying facemovie\__init__.py -> build\lib\facemovie
copying facemovie\lib\exif.py -> build\lib\facemovie\lib
copying facemovie\lib\__init__.py -> build\lib\facemovie\lib
running install_lib
running install_egg_info
Removing C:\Python27\Lib\site-packages\Facemovie-0.4-py2.7.egg-info
Writing C:\Python27\Lib\site-packages\Facemovie-0.4-py2.7.egg-info
running py2exe
.......
Adding python27.dll as resource to C:\Users\jll\perso\workspace\FaceMovie\dist\Facemoviefier.exe
The following modules appear to be missing
['Carbon', 'Carbon.Files', 'Numeric', 'Pyrex.Compiler.Main', '__svn_version__', '_curses', '_scproxy', 'configparser', ..., 'lib.exif']
ご覧のとおり、lib / exifファイルは実際にコピーされますが、後で見つかりません。
実行可能ファイルを実行しようとすると、次の出力が表示されます。
C:\Users\jll\perso\workspace\FaceMovie\dist>Facemoviefier.
Traceback (most recent call last):
File "Facemoviefier.py", line 12, in <module>
File "zipextimporter.pyc", line 82, in load_module
File "Facemovie.pyc", line 10, in <module>
ImportError: No module named lib.exif
そしてここにエラーを引き起こすFacemovie.pyの行があります:
import lib.exif as exif
昨日は色々なことを試したり、たくさんのドキュメントを読んだりしましたが、何が問題なのか理解できませんでした。必要に応じて初期化.pyファイルがあり、Pythonコードは問題なく実行されます。
ヒントをいただければ幸いです。
ありがとう !
編集 :
最終的に問題を解決しました。@mataには正しい解決策がありました(ただし、ここに投稿する前にこれらの行を試しました)。
実際の問題は、py2exeが私のpyファイルをコピーすることから始まるという事実から来ていました
C:\Python27\Lib\site-packages
どうやらそれらを使用してexeファイルを作成します。作成時に、それらは.pycにコンパイルされます。
site-packagesフォルダーにはすでに.pycファイルが含まれていたため、実行可能ファイルをさらに作成すると、コンパイルがスキップされていました。
ビルドする前にantターゲットを使用してこれらのファイルを削除することで一時的な解決策を見つけましたが、これが適切かどうか疑問に思います。
安定状態に達するまで、py2exeはサイトパッケージに何かをコピーすることを避けるべきではありませんか?