配置setup.py以提供多种安装模式

时间:2018-12-17 16:57:23

标签: python pip setup.py

是否有任何解决方案可以使用setup.py创建python软件包的特定安装?

我想根据要给pip提供的一些参数来安装不同的模块。

修改

也许我的第一条信息不清楚,我将在下面给出更好的解释。

我们有一个共享的python软件包,以便与整个公司的技术人员共享一些代码。该软件包位于私人仓库中,可通过pip安装。

不幸的是,这个软件包变得越来越大,我们现在在尝试安装它时遇到一些性能问题。

我想知道是否有可能以某种方式创建一个自定义的setup.py脚本,该脚本将允许用户仅安装模块的一小部分,而不安装整个模块。

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

您的setup.py中应该有这样一行:

setup(
    # ...
    packages=find_packages(),
    # ...
)

要解决您的问题,您需要使用此find_packages方法,此函数将返回该项目中的python软件包列表

因此解决方案很简单,即为用户提供setup.py的args,并根据该参数返回选择find_packages

这是一个简化的代码

if '--full' in sys.argv:
    packages = find_packages()
elif '--only-module-a':
    packages = [p for p in find_packages() if p.startswith('a')]

setup(
    # ...
    packages=packages,
    # ...
)

PS:正如@hoefling评论的那样,此解决方案是一个棘手的问题,可能会给用户带来误解,因此您应将程序包分成较小的子程序包(您仍然可以将其保存在一个存储库中)

答案 1 :(得分:0)

您是否尝试过使用pip freeze > requirements.txt生成所有已安装软件包的文本文件,编辑该文本文件中所需的软件包和版本,然后pip install -r requirements.txt将该文件安装在其他位置?