我正在尝试使用py2exe为我用python 2.7编写的桌面应用程序创建一个EXE。 该应用程序使用ibm_db(v2.0.7),它以.egg文件夹的形式安装到site-packages。 ibm_db.py文件的内容非常短,因为逻辑本身是在DLL中实现的:
import os
if 'clidriver' not in os.environ['PATH']:
os.environ['PATH'] = os.environ['PATH'] + ";" + os.path.join(os.path.abspath(os.path.dirname(__file__)), 'clidriver', 'bin')
def __bootstrap__():
global __bootstrap__, __loader__, __file__
import sys, pkg_resources, imp
__file__ = pkg_resources.resource_filename(__name__,'ibm_db_dlls\ibm_db.dll')
__loader__ = None; del __bootstrap__, __loader__
imp.load_dynamic(__name__,__file__)
__bootstrap__()
当我在项目上运行py2exe时,对ibm_db的依赖关系没有得到妥善处理(DLL没有进入dist),因此运行exe文件时会发现以下错误:
...
File "ibm_db.pyc", line 10, in <module>
File "ibm_db.pyc", line 6, in __bootstrap__
ImportError: No module named pkg_resources
我尝试将DLL手动复制到dist文件夹(直接和ibm_db_dlls子文件夹下),但它没用。 我找到了这个页面,并意识到py2exe有一个问题: http://www.py2exe.org/index.cgi/ExeWithEggs
据我了解,解压缩鸡蛋不是我的方法,因为我的程序确实使用pkg_resources(通过ibm_db.py)。不过,我尝试使用--always-unzip选项通过easy_setup安装ibm_db,但是安装给了我这个错误:
Not a URL, existing file, or requirement spec: '--always-unzip'
它仍然以.egg的形式安装。 所以我正在查看“在dist目录中包含.egg文件”选项,并想知道它是否可以提供帮助。如果是这样 - 从哪里开始?
我正在使用这个简单的setup.py来运行py2exe:
from distutils.core import setup
import py2exe
setup(console=['MyApp.py'])
那里提到的“TurboGears”是什么?它看起来不像我在我的应用程序中使用的东西。
任何建议将不胜感激。 感谢。