我们生成2个以egg文件形式分发的Python应用程序。我们已经在Python 2.5.4下生产了它们多年,但是现在它们正在将它们都提升到2.7.13。在这个过程中,2个应用程序中的1个现在在2.7.13上安装后表现出奇怪的行为。
当我easy_install.exe鸡蛋时,它似乎在各方面都很成功,我知道如何看。但是,当我尝试在Python命令行导入模块时,我得到一个ImportError。
这个问题有很多奇怪的事情:
这是失败的蛋的setup.py(模块名称更改为foo以保护无辜者):
from setuptools import setup
setup(name='foo',
description='Foo Module',
packages=['foo'],
entry_points = {
'console_scripts': [
'foo = foo.foo:main',
],
},
)
这是工作 egg的setup.py:
from setuptools import setup
setup(name='bar',
description='Bar Tool',
packages=['bar', 'bar.hexes', 'bar.barlib'],
entry_points = {
'console_scripts': [
'bar = bar.main:main',
],
},
)
由于直到我尝试导入模块时才发现任何问题,我该如何调试此问题?
我目前的主要嫌疑人是setup.py的console_scripts部分中的foo.foo引用。这听起来有点像@joest在this problem中给出的答案。
答案 0 :(得分:0)
无法导入foo模块,因为鸡蛋中没有__init__.py
。由于我仍然不完全理解的原因,我们的x64构建机器在创建egg期间自动生成该文件(您将看到Creating missing __init__.py for foo
消息),而x86构建机器跳过该步骤并产生一个破蛋。考虑到我们构建Python本身以及所有必要的模块作为构建这个egg的过程的一部分,我不知道行为可能会有什么不同,但确实如此。
我刚刚在foo源目录中创建了一个空白__init__.py
,现在鸡蛋总是正确构建和导入。