我有一个内部实用程序库,许多项目都在使用该库。它们从实用程序库中提取的代码中的项目之间有很多重叠,但是随着库的增长,任何单个项目得到的多余的东西也将不再使用。如果该库仅由python组成,但该库也捆绑在二进制文件中,则不会有问题。
示例-
psycopg2 用于实用程序库中的少数地方,但并非所有项目都需要数据库访问。由于开发环境与生产环境不同,因此该实用程序库还包含用于生产环境的psycopg2二进制文件。
openssl库,pandas,numpy,scipy,pyarrow等的增长。结果是将一个可能需要db访问的50行小型单用途脚本捆绑到一个100mb +的部署包中。
所以我想做的是将实用程序库分解成多个部分,以便下游项目可以选择要插入的部分,但将实用程序库代码保留在一个易于管理的位置。这样,这个小型的单一用途应用程序就可以选择导入internal-util@core
,internal-util@db
,并且不包含internal-util@numpy
和internal-util@openssl
我要描述的是可以做的吗?
答案 0 :(得分:2)
据我所知,不是直接的。 pip
完全安装了软件包,或者根本没有安装。
但是,如果您在软件包中谨慎考虑如何导入可能需要psycopg2
或someotherlargebinarything
的内容,则可以使用extras_require
功能,从而让软件包的用户选择他们想引入哪些依赖项:
setup(
# ...
name='myawesometoolbelt',
extras_require={
'db': ['psycopg2'],
'math': ['numpy'],
},
)
,然后在您的requirements.txt
或pip
调用中,
myawesometoolbelt[db,math]
答案 1 :(得分:0)
您是否尝试过查看pip freeze > requirements.txt
和pip install -r requirements.txt
?
一旦您通过点子冻结生成了点子列表,就可以编辑要安装的软件包,并从生成的requirements.txt
中忽略哪些软件包。
然后,您可以pip install -r requirements.txt
返回想要的东西。