【问题标题】:Python EGG: include top-level dirPython EGG:包含顶级目录
【发布时间】:2015-08-27 13:02:10
【问题描述】:

我们有类似的东西:

/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% 正确的代码 - 没有拼写错误,没有错误级别的目录(比如 .. 而不是../..)。

问题正是这样:更高级别的目录不包含在 EGG 中;或者我们不能使用它们。

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

Scrapyd 0.24、Python 2.7(标准 Ubuntu 14.04 x64 软件包)。

谢谢!

附:我们使用 Scrapyd 将代码打包到 EGG 中。而且调试这样一个“智能”解决方案真的很痛苦(毕竟,谁决定使用这样一个噩梦般的部署解决方案?要是我们能扔掉 Scrapyd 就好了……)。

【问题讨论】:

    标签: python egg scrapyd


    【解决方案1】:

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

    它的工作方式 subdir1-1 是构建树的根,所以不,你不能超越它。也可以在生成的 egg 中工作,因此您不能包含更高级别的目录并且如果您这样做了,您将无法使用它们。

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 2011-06-12
      • 1970-01-01
      • 2010-11-09
      • 2015-07-21
      • 2010-10-11
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多