我正在尝试从我的项目中创建一个.exe,但py2exe似乎失败了,因为我添加了一个lib子包,其中包含了外部库。
以下是我的项目设置方式:
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
我尝试了各种各样的东西,并在最后几天阅读了很多文档,但却无法理解问题的来源。我根据需要有 init .py文件,并且我的Python代码运行没有任何问题。
我真的很感激任何提示。
谢谢!
编辑:
终于解决了这个问题。 @mata有正确的解决方案(虽然我在发布之前已尝试过这些行)。
实际问题来自py2exe通过复制我的py文件
开始的事实C:\Python27\Lib\site-packages
并且显然使用它们来创建exe。 在创建过程中,它们被编译为.pyc。
进一步创建可执行文件是跳过编译,因为site-packages文件夹已经包含.pyc文件。
我在构建之前找到了使用ant目标删除这些文件的临时解决方案,但我不知道这是否是好的实践。
在我达到稳定状态之前,py2exe是否应该避免将任何内容复制到网站包中?
答案 0 :(得分:1)
而不是:
import lib.exif as exif
尝试:
import facemovie.lib.exif as exif
# or
from facemovie.lib import exif