如何从公共共享文件夹中按需导入指定的Python包?
实现方法
有两种无需每次修改setup.py的实现方案,你可以根据自己的使用场景选择:
方案1:环境变量动态控制打包范围(改一次setup.py即可)
只需修改一次setup.py,增加通过环境变量筛选打包模块的逻辑,后续安装时传入对应参数即可指定要安装的模块:
- 修改后setup.py代码:
from setuptools import setup, find_packages import os # 读取环境变量配置的模块列表,多个模块用英文逗号分隔,未配置则默认安装所有模块 enable_modules = os.getenv("COMMON_ENABLE_MODULES", "").strip() if enable_modules: target_modules = [m.strip() for m in enable_modules.split(",")] packages = [pkg for pkg in find_packages() if pkg.split(".")[0] in target_modules] else: packages = find_packages() setup( name='Common', version='0.1', description='Common Code', author='Me', license='MIT', packages=packages, zip_safe=False )
- Proj1环境仅安装CommonA的执行命令:
- Windows环境:
set COMMON_ENABLE_MODULES=CommonA && pip install .\Common
- Linux/Mac环境:
COMMON_ENABLE_MODULES=CommonA pip install ./Common
如果需要同时安装多个模块,只需修改环境变量的值,用英文逗号分隔模块名即可,例如COMMON_ENABLE_MODULES=CommonA,CommonC。
方案2:拆分独立子包(适合公共模块持续迭代的场景)
如果后续你会新增大量公共模块,可直接将每个子模块改造为独立的可分发包,各自维护setup.py,目录结构调整如下:
/Development /Common /CommonA __init__.py setup.py commonA.py /CommonB __init__.py setup.py commonB.py
每个子模块的setup.py单独配置自身的元信息,之后哪个项目需要某个模块,直接安装对应子目录即可,例如Proj1安装CommonA执行:
pip install .\Common\CommonA
这种方式完全不需要修改公共配置,各模块独立分发、互不影响,适合公共库复杂度较高的场景。
内容的提问来源于stack exchange,提问作者russ_user123
相关产品推荐
相关产品推荐

