gpt4 book ai didi

setuptools - 从 python bdist_egg 或 bdist_wheel 中排除单个源文件

转载 作者:行者123 更新时间:2023-12-05 00:47:56 25 4
gpt4 key购买 nike

背景:我有一个负责安全的源文件。里面有魔术键和特定的算法。

是否可以从 python egg 或 wheel 包中删除这个单一的源文件?

我已经完成了使用 egg 命令只发送二进制文件。

python setup.py bdist_egg --exclude-source-files

编辑项目结构:
├── setup.py
├── src
| ├── __init__.py
| ├── file1.py
| ├── file2.py
| ├── file_to_exclude.py

谢谢你的帮助!

最佳答案

不幸的是,distutils也不是 setuptools提供排除单个模块的可能性,因此您必须解决它。

更新:

我已经描述了一个更好的解决方案here模仿包排除setuptoolsfind_packages() 中做.您将不得不覆盖 build_py设置脚本中可以接受排除模式列表的命令,与 exclude 相同列入find_packages .在您的情况下,它将是:

import fnmatch
from setuptools import find_packages, setup
from setuptools.command.build_py import build_py as build_py_orig


exclude = ['src.file_to_exclude']


class build_py(build_py_orig):

def find_package_modules(self, package, package_dir):
modules = super().find_package_modules(package, package_dir)
return [(pkg, mod, file, ) for (pkg, mod, file, ) in modules
if not any(fnmatch.fnmatchcase(pkg + '.' + mod, pat=pattern)
for pattern in exclude)]


setup(
...,
packages=find_packages(),
cmdclass={'build_py': build_py},
)

我发现这是一个更强大的 distutils - 符合以下解决方案。它还可以通过通配符匹配排除多个模块,例如
exclude = ['src.file*']

将排除所有以 file 开头的模块在 src包裹,或
exclude = ['*.file1']

将排除 file1.py在所有包中。

原始答案

将要排除的模块放在单独的包中

您可以使用 setuptools可以排除包(包含 __init__.py 文件的目录),但需要进行一些重构。创建 package_to_exclude , 把 file_to_exclude.py在那里并修复所有最终的导入错误:
project
├── setup.py
└── src
├── __init__.py
├── file1.py
├── file2.py
└── package_to_exclude
├── __init__.py
└── file_to_exclude.py

现在您可以排除 package_to_exclude在设置脚本中:
from setuptools import find_packages, setup

setup(
...,
packages=find_packages(exclude=['src.package_to_exclude'])
)

排除包,通过 py_modules 添加要包含的模块

如果您不能或不想将模块移动到单独的包中,您可以排除 src打包并添加 src中的所有模块除了 file_to_excludepy_modules .例子:
import os
from setuptools import find_packages, setup

excluded_files = ['file_to_exclude.py']
included_modules = ['src.' + os.path.splitext(f)[0]
for f in os.listdir('src')
if f not in excluded_files]

setup(
...,
packages=find_packages(exclude=['src']),
py_modules=included_modules,
)

关于setuptools - 从 python bdist_egg 或 bdist_wheel 中排除单个源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50506072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com