我有一个项目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]
我是否必须为每个子项目创建单独的二进制分发?
答案 0 :(得分:3)
不要将B
和C
添加到install_requires
列表中。这是通过奶酪店(即pypi)发布的包裹。您必须将B
和C
放在packages
列表下。
请记住,install_requires
中的依赖关系在构建python版本时没有捆绑(二进制或不二进制),但packages
中的包与您的版本捆绑在一起(您可以将它们视为& #34;模块"而不是独立的库,因为它们将是)。
为了解释这一点,如果您有自己的轮子并且将它交给我并尝试安装它,那么将从奶酪展示中提取nose
包并进行安装。还会尝试以这种方式安装B
和C
,但它们会失败,因为您从未构建它们并将它们发布到pypi服务器。
所以你实际上有2个选择。第一个是单独构建B
和C
,并将它们分别发布到pypi服务器(或您自己的pypi服务器)。另一种方法是在B
文件中包含C
和setup.py
作为包。这样,当您构建主项目时,B
和C
都包含在您的版本中(即您的案例中的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'}
)