如何将主目录外的global_vars.py纳入folder_2的Python Wheel包?
针对Wheel包包含
global_vars.py的修改方案 一、info.yaml的修改
如果info.yaml仅存储包的元数据(如版本、作者、描述等),无需修改该文件。只有当你原本在info.yaml中定义了packages、py_modules这类文件列表配置时,才需要添加global_vars的对应条目,否则保持原样即可。
二、setup.py的修改
要将folder_1下的global_vars.py纳入包中,有两种规范的实现方式,根据你的需求选择:
方式1:调整文件结构(推荐)
直接将global_vars.py移动到folder_2目录下,同时确保folder_2、folder_3目录下都存在空的__init__.py文件(用于标识Python包)。此时setuptools的find_packages()会自动识别并包含这个模块,用户可以通过import folder_2.global_vars导入。setup.py只需保持原有从info.yaml读取元数据的逻辑,无需额外修改。
方式2:保留原文件位置
如果必须让global_vars.py留在folder_1,需要修改setup.py的配置,让setuptools能找到并打包这个文件:
- 先确保
setup.py中导入必要模块并读取info.yaml:
import os import yaml from setuptools import setup, find_packages # 读取info.yaml中的元数据 with open(os.path.join("folder_3", "info.yaml"), "r") as f: pkg_info = yaml.safe_load(f)
- 修改
setup()函数的参数,添加py_modules和package_dir配置:
setup( name=pkg_info["name"], version=pkg_info["version"], # 自动识别folder_2下的子包(如folder_3) packages=find_packages(), # 指定要打包的单独模块文件 py_modules=["global_vars"], # 告诉setuptools去上级目录(folder_1)找global_vars.py package_dir={"": "../"}, # 其他元数据从info.yaml读取(如author、description等) author=pkg_info["author"], description=pkg_info["description"], # 其他必要参数... )
- 验证效果
生成Wheel包并安装后,测试导入:
# 生成包 python setup.py bdist_wheel # 安装包 pip install dist/[你的包名]-[版本号]-py3-none-any.whl # 测试导入 python -c "import folder_2.folder_3; import global_vars; print('导入成功')"
注意事项
- 方式2中,用户导入
global_vars时是直接import global_vars,而非import folder_2.global_vars,如果需要后者,还是推荐方式1的结构调整。
内容的提问来源于stack exchange,提问作者programmer_04_03
相关产品推荐
相关产品推荐

