如何从 Python 中的子模块安装依赖项?
How to install a dependency from a submodule in Python?
我有一个具有以下结构的 Python 项目(为简单起见省略了不相关的源文件):
myproject/
mysubmodule/
setup.py
setup.py
文件 myproject/setup.py
使用 distutils.core.setup
安装模块 myproject
和相关源。但是,myproject
需要安装 mysubmodule
(这是一个 git 子模块)。所以我现在正在做的是:
myproject/$ cd mysubmodule
myproject/mysubmodule/$ python setup.py install
myproject/mysubmodule/$ cd ..
myproject/$ python setup.py install
这对客户来说太乏味了,尤其是如果项目将来会通过更多的子模块进行扩展。
有没有办法在调用 myproject/setup.py
时自动安装 mysubmodule
?
为 mysubmodule
创建一个包含 setup.py
的包,并让顶级包在其 setup.py
中依赖于该包。这意味着您只需要使包/依赖项可用,并在顶级包上 运行 python setup.py install
。
然后问题变成了如何将依赖项/包发送给您的客户,但这可以通过将它们放在一个目录中并配置 setup.py
以在搜索依赖项时包含该目录来解决。
另一种方法是 "vendor" mysubmodule
,这只是意味着将其全部包含在一个包中(不再问其他问题),并有一个 python setup.py install
来安装主包。例如,pip
供应商(包括)requests
因此它可以使用它而不必依赖那个 requests
包。
setuptools.find_packages()
能够发现子模块
你的setup.py
应该看起来像
from setuptools import setup, find_packages
setup(
packages=find_packages(),
# ...
)
我有一个具有以下结构的 Python 项目(为简单起见省略了不相关的源文件):
myproject/
mysubmodule/
setup.py
setup.py
文件 myproject/setup.py
使用 distutils.core.setup
安装模块 myproject
和相关源。但是,myproject
需要安装 mysubmodule
(这是一个 git 子模块)。所以我现在正在做的是:
myproject/$ cd mysubmodule
myproject/mysubmodule/$ python setup.py install
myproject/mysubmodule/$ cd ..
myproject/$ python setup.py install
这对客户来说太乏味了,尤其是如果项目将来会通过更多的子模块进行扩展。
有没有办法在调用 myproject/setup.py
时自动安装 mysubmodule
?
为 mysubmodule
创建一个包含 setup.py
的包,并让顶级包在其 setup.py
中依赖于该包。这意味着您只需要使包/依赖项可用,并在顶级包上 运行 python setup.py install
。
然后问题变成了如何将依赖项/包发送给您的客户,但这可以通过将它们放在一个目录中并配置 setup.py
以在搜索依赖项时包含该目录来解决。
另一种方法是 "vendor" mysubmodule
,这只是意味着将其全部包含在一个包中(不再问其他问题),并有一个 python setup.py install
来安装主包。例如,pip
供应商(包括)requests
因此它可以使用它而不必依赖那个 requests
包。
setuptools.find_packages()
能够发现子模块
你的setup.py
应该看起来像
from setuptools import setup, find_packages
setup(
packages=find_packages(),
# ...
)