Python EGG:包括顶级目录

时间:2015-06-11 17:25:39

标签: python egg scrapyd

我们有类似的东西:

/dir/
    subdir1/
           subdir1-1/
                    (some module)
                    setup.py
           subdir1-2/
                    (another module)
    subdir2/
           (another module)

subdir1-2中的代码使用subdir2模块中的(= imports)代码。一切都很好,直到我们想将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(比如...而不是../..).

问题恰恰如此:EGG中不包括更高级别的目录;或者我们不能使用它们。

答案来自:top-level package handling with setuptools (or another python egg builder)不起作用。

Scrapyd 0.24,Python 2.7(标准Ubuntu 14.04 x64包)。

谢谢!

P.S。我们正在使用Scrapyd将代码打包到EGG中。调试这样一个“智能”解决方案真的很痛苦(毕竟,谁决定使用这种噩梦般的部署解决方案?如果我们只能扔掉Scrapyd ......)。

1 个答案:

答案 0 :(得分:0)

将setup.py移至/ dir /并相应地重写所有内容。

它的工作方式subdir1-1是构建树的根,所以不,你不能超过它。也可以在生成的鸡蛋里面工作,这样你就不能包含更高级别的目录如果你这样做的话就不能使用它们。