【问题标题】:How to build wheels for a project that requires other source projects?如何为需要其他源项目的项目构建轮子?
【发布时间】:2015-10-08 19:31:22
【问题描述】:

我有一个项目 A,它对 B 和 C 有源(“编辑”)依赖项(恰好在 git 子模块中)。我有一个这样的需求文件:

[requirements.txt]
nose
-e B/src
-e C/src

我的 setup.py 将这些包列为 deps:

[setup.py]
install_requires=[nose, B, C]

但是当我在另一个客户端项目 X 中安装轮子时,找不到这些“源”依赖项(它们不是 A 轮子的一部分)。

Collecting B (from A==0.0.1)
Could not find a version that satisfies the requirement B (from A==0.0.1) (from versions: )
No matching distribution found for B (from A==0.0.1)

我必须为每个子项目创建单独的二进制分发吗?

【问题讨论】:

    标签: python python-wheel


    【解决方案1】:

    不要将BC 放在install_requires 列表中。这适用于通过奶酪店(即 pypi)发布的包。您必须将BC 放在packages 列表下。

    请记住,install_requires 中的依赖项在您构建 python 版本(二进制或非二进制)时不会捆绑,但packages 中的包与您的版本捆绑在一起(您可以将它们视为“模块”而不是独立库,因为它们会是)。

    为了解释这一点,如果您有自己的轮子并将其交给我并尝试安装它,则将从奶酪秀中获取 nose 包并进行安装。 BC 也将尝试以这种方式安装,但它们失败了,因为您从未构建它们并将它们发布到 pypi 服务器。

    所以实际上你有 2 个选择。第一个是分别构建BC 并将它们中的每一个发布到pypi 服务器(或您自己的pypi 服务器)。另一种选择是将BC 作为包包含在setup.py 文件中。这样,当您构建主项目时,BC 都包含在您的版本中(即您的情况下的轮文件)。

    如果您选择单独构建本地依赖项并将它们上传到 pypi 服务器,那么您的设置应该可以正常工作。否则,如果您选择其他选项,则必须将本地依赖项移动到包列表。以下是您在这种情况下可能创建的 setup.py 示例:

    from setuptools import setup
    
    setup(
        name='myproject',
        version='1.0.0',
        author='myself',
        author_email='myself@mywebsite.com',
        install_requires=['nose'],
        packages==['B', 'C']
        package_dir={'A': 'path/to/A/directory', 'B': 'path/to/B/dir'}
    ) 
    

    【讨论】:

    • 非常感谢您的详细回复。我理解您的解释(我需要选项 2),但我无法让事情发挥作用:我现在可以构建一个轮子,但文件大小看起来太小并且缺少许多模块。我的模块 B 和 C 每个都有许多子目录。 1)。 packages=['B', 'C'] 会自动拾取这些吗? 2)。如何检查轮子的内容以进行检查? 3)。我正在运行“python setup.py bdist_wheel”对吗? 4. 我似乎必须从与 set-up.py 相同的目录运行它(例如,我不能执行“python src/main/python/setup.py”),否则它会静默失败。
    • 好的,所以我现在意识到我可以将多个 find_packages() 调用添加到 packages 属性,所以我现在可以工作了。再次感谢。
    • @rsb 所以你有'B.find_packages()'?你能提供一个如何拨打多个find_packages() 电话的例子吗? bdist_wheel 是否适合您?我读过二进制发行版依赖于平台,是这样吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多