创建包含嵌套源项目的Python Wheel分布

时间:2015-10-08 19:31:23

标签: python python-wheel

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

select top 5 
    count(*) over (),
    column1, 
    max(column2), 
    min(column3)
from myTable
group by column1
order by column1

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

不要将BC添加到install_requires列表中。这是通过奶酪店(即pypi)发布的包裹。您必须将BC放在packages列表下。

请记住,install_requires中的依赖关系在构建python版本时没有捆绑(二进制或不二进制),但packages中的包与您的版本捆绑在一起(您可以将它们视为& #34;模块"而不是独立的库,因为它们将是)。

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

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

如果您选择单独构建本地依赖项并将它们上传到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'}
)