如何从Python bdist_egg/bdist_wheel包中排除单个源文件?
当然可以!你完全可以精准地把那个包含敏感信息的file_to_exclude.py单独从Python egg或wheel包中移除,不用一刀切地排除所有源文件。下面是几种适配你项目结构的可行方案:
方案1:在setup.py中配置精准排除规则
这是最直接的方式,通过exclude_package_data参数指定要排除的单个文件,同时保留其他源文件的控制权限。修改你的setup.py如下:
from setuptools import setup, find_packages setup( name="your-package-name", # 替换成你的实际包名 packages=find_packages("src"), package_dir={"": "src"}, # 指定源码根目录为src # 可选:如果需要包含其他特定文件,可在这里配置 package_data={ "your_package": ["*.py"], # your_package对应src目录下的包名 }, # 核心:精准排除目标文件 exclude_package_data={ "your_package": ["file_to_exclude.py"], }, )
配置完成后,不管你执行egg还是wheel的构建命令,这个文件都会被自动排除:
# 构建egg包 python setup.py bdist_egg --exclude-source-files # 构建wheel包 python setup.py bdist_wheel --exclude-source-files
方案2:使用MANIFEST.in实现通用排除
如果你需要同时控制源码包和二进制包的文件排除,可以在项目根目录创建MANIFEST.in文件,写入以下内容:
exclude src/file_to_exclude.py
这个文件会被setuptools自动识别,在构建任何类型的包时都会遵循这个排除规则,无需额外命令参数(当然配合--exclude-source-files使用效果更好)。
方案3:使用现代build工具简化流程
如果你已经在使用更现代的Python构建工具,可以用build包来完成,同样会遵循setup.py里的排除规则:
# 先安装build工具 pip install build # 构建wheel包(自动遵循exclude配置) python -m build --wheel --no-isolation
重要验证步骤
构建完成后,记得解压生成的egg或wheel包(两者本质都是压缩文件),确认file_to_exclude.py以及对应的编译文件(如.pyc)都不在包内,确保敏感信息没有泄露。
另外额外提醒:尽量避免在代码中硬编码密钥这类敏感信息,即使排除了文件,开发环境中的源码也要妥善保管,建议使用环境变量或专业的密钥管理服务来处理敏感数据。
内容的提问来源于stack exchange,提问作者Niecore
相关产品推荐
相关产品推荐

