我有一个被许多项目使用的内部实用程序库。从实用程序库中提取的代码中的项目之间有相当多的重叠,但随着库的增长,任何单个项目获得的不会使用的额外内容也会增加。如果该库仅包含 python,那么这不会成为问题,但该库也捆绑在二进制文件中。
Example-
psycopg2在实用程序库中的少数地方使用,但并非所有项目都需要数据库访问。由于开发环境与生产环境不同,实用程序库还包括用于生产环境的 psycopg2 二进制文件。
随着 openssl 库、pandas、numpy、scipy、pyarrow 等的不断增长,结果是可能需要数据库访问的小型 50 行单一用途脚本被捆绑到 100mb+ 的部署包中。
因此,我想做的是将实用程序库分割成多个部分,下游项目可以选择要拉入哪些部分,但将实用程序库代码保留在一个易于管理的位置。这样,这个小型单一用途应用程序就可以选择导入internal-util@core
, internal-util@db
并且不包括internal-util@numpy
and internal-util@openssl
我所描述的事情可以做到吗?
据我所知,不是直接的。pip
完全安装或根本不安装软件包。
但是,如果您在包中注意如何导入可能需要的内容psycopg2
or someotherlargebinarything
,你可以使用extras_require https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras功能,从而让包的用户选择他们想要引入的依赖项:
setup(
# ...
name='myawesometoolbelt',
extras_require={
'db': ['psycopg2'],
'math': ['numpy'],
},
)
然后,在你的requirements.txt
, or pip
调用,
myawesometoolbelt[db,math]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)