我们有类似的东西:
/dir/
subdir1/
subdir1-1/
(some module)
setup.py
subdir1-2/
(another module)
subdir2/
(another module)subdir1-2中的代码使用(=imports) subdir2模块中的代码。一切都很好,直到我们想要将subdir2打包到EGG中(从subdir1-1)并重用它。似乎EGG不能从更高级别的目录中打包任何东西。
我们的setup.py:
data_files=[
(root, [os.path.join(root, f) for f in files])
for root, _, files in itertools.chain(
os.walk('some_module'),
os.walk('../subdir2'), # DOES NOT WORK!
os.walk('../../subdir2), # DOES NOT WORK!
os.walk(os.path.join(current_dir, '..', 'subdir2')), # DOES NOT WORK
os.walk(os.path.join(current_dir, '..', '..', 'subdir2')) # DOES NOT WORK AS WELL!
)
],我们还尝试将该模块添加到sys.path中--没有成功。位于内部目录中的任何模块都能正常工作。来自更高级别目录的任何模块都不起作用。
我是通过内存编写的,所以请不要在我上面提供的代码中寻找输入错误-在我们的代码中,我们编写了100%正确的代码-没有输入错误,没有错误的级别目录(例如..而不是../..)。
问题就是这样:更高级别的dirs没有被包含在代码中;或者我们不能使用它们。
这里的答案是:top-level package handling with setuptools (or another python egg builder)不起作用。
Scrapyd0.24,Python2.7(标准Ubuntu14.04 x64包)。
谢谢!
另外,我们使用的是Scrapyd,它将代码打包成鸡蛋。调试这样一个“聪明”的解决方案真的很痛苦(毕竟,谁决定使用这样一个噩梦般的部署解决方案呢?如果我们能扔掉Scrapyd就好了。
发布于 2015-06-20 02:15:58
将setup.py移动到/dir/,并相应地重写所有内容。
它的工作方式subdir1-1是你的构建树的根,所以不,你不能超过它。也可以在生成的代码中工作,所以你不能包含更高级别的目录和,如果你这样做了,你就不能使用它们。
https://stackoverflow.com/questions/30787475
复制相似问题