mic*_*cah 1 python pip setup.py
我有一个被许多项目使用的内部实用程序库。它们从实用程序库中提取的代码中的项目之间有相当多的重叠,但是随着库的增长,任何单个项目获得的不会使用的额外内容的数量也会增加。如果库仅由 python 组成,这不会成为问题,但该库还捆绑在二进制文件中。
例子-
psycopg2用于实用程序库中的少数地方,但并非所有项目都需要 db 访问权限。由于开发环境与生产环境不同,实用程序库还包括用于生产环境的 psycopg2 二进制文件。
这随着 openssl 库、pandas、numpy、scipy、pyarrow 等的增加而增长。结果是一个可能需要 db 访问的小型 50 行单用途脚本被捆绑到一个 100mb 以上的部署包中。
所以我想要做的是将实用程序库分成几部分,让下游项目可以选择要拉入哪些部分,但将实用程序库代码保存在一个易于管理的地方。这样,这个小型的单一用途应用程序可以选择导入internal-util@core,internal-util@db而不是包含internal-util@numpy和internal-util@openssl
我所描述的可以做吗?
据我所知,不是直接的。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)
| 归档时间: |
|
| 查看次数: |
1850 次 |
| 最近记录: |