是否可以通过 Pip 安装部分 Python 包?

mic*_*cah 1 python pip setup.py

我有一个被许多项目使用的内部实用程序库。它们从实用程序库中提取的代码中的项目之间有相当多的重叠,但是随着库的增长,任何单个项目获得的不会使用的额外内容的数量也会增加。如果库仅由 python 组成,这不会成为问题,但该库还捆绑在二进制文件中。

例子-

psycopg2用于实用程序库中的少数地方,但并非所有项目都需要 db 访问权限。由于开发环境与生产环境不同,实用程序库还包括用于生产环境的 psycopg2 二进制文件。

这随着 openssl 库、pandas、numpy、scipy、pyarrow 等的增加而增长。结果是一个可能需要 db 访问的小型 50 行单用途脚本被捆绑到一个 100mb 以上的部署包中。

在此处输入图片说明

所以我想要做的是将实用程序库分成几部分,让下游项目可以选择要拉入哪些部分,但将实用程序库代码保存在一个易于管理的地方。这样,这个小型的单一用途应用程序可以选择导入internal-util@coreinternal-util@db而不是包含internal-util@numpyinternal-util@openssl

在此处输入图片说明

我所描述的可以做吗?

AKX*_*AKX 5

据我所知,不是直接的。pip完全安装一个包,或者根本不安装。

但是,如果您在包中小心如何导入可能需要psycopg2或 的东西someotherlargebinarything,您可以使用该extras_require功能,从而让包的用户选择他们想要引入的依赖项:

setup(
  # ...
  name='myawesometoolbelt',
  extras_require={
    'db': ['psycopg2'],
    'math': ['numpy'],
  },
)
Run Code Online (Sandbox Code Playgroud)

然后,在您的requirements.txt, 或pip调用中,

myawesometoolbelt[db,math]
Run Code Online (Sandbox Code Playgroud)

  • 我可以使用作为库一部分的本地模块通过使用 extras_require 选择性地包含在 pip 安装中吗? (2认同)