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

2023-11-21

背景:我有一个负责安全性的源文件。其中有神奇的钥匙和特定的算法。

是否可以从 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 nor setuptools提供了排除单个模块的可能性,因此您必须解决它。

Update:

我描述了一个更好的解决方案here模仿包排除setuptools确实在find_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 in src包,或

exclude = ['*.file1']

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

原答案

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

你可以利用这样一个事实setuptools可以排除包(包含__init__.py文件),但这需要一些重构。创建一个package_to_exclude, put 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 except file_to_exclude in py_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,
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 python bdist_egg 或 bdist_wheel 中排除单个源文件 的相关文章

随机推荐

  • 同时多个 wget -r 一个站点?

    任何带有选项的命令 wget 对于多线程递归地同时下载站点 我找到了一个不错的解决方案 阅读原文位于http www linuxquestions org questions linux networking 3 wget multi th
  • 返回 this 方法的嵌套 LINQ 无法转换为存储表达式异常

    以下 LINQ retval from jm in entities JobMasters where jm UserId userId jm IsRemote false select new JobDto JobMasterId jm
  • 如何更改 Flutter 网页字体?

    我正在尝试更改 Flutter for Web 应用程序中标题的字体 我该怎么做 我发现 pubsec yaml 与移动版本完全不同 这里是文件 name projectbaseclient description An app built
  • Safari 和 Mobile Safari 中的内联 SVG 中断

    我最近推出了一个使用了一些内联 SVG 的网站
  • VBA 监视新文件的文件夹

    所以我正在尝试编写一个 VBA 程序来监视文件夹中的新文件 然后对它们进行处理 我发现了一些有关使用 WMI api 的有希望的示例 在 VBA 中接收文件创建通知 无需轮询 http www mrexcel com forum excel
  • 如何查找并删除文本文件中的表情符号?

    我试图从我主要使用 sed 和一些 perl 命令解析的文本文件中删除所有表情符号 并且最好将它们存储在单独的文件中 但这不是必需的 我可以使用 bash 或 perl 轻松完成此操作吗 或者我应该使用另一种语言 EDIT 感谢赛勒斯和巴尔
  • xamarin.form 中的弹出消息框

    我想做的与 DisplayAlert 类似 弹出一个显示页面 其中包含图像 内容和右上角的小关闭按钮 显示页面不应覆盖整个手机 但大约 80 的手机 UI 背景仍作为父页面 我正在尝试使用 PushModalAsync 和 PopModal
  • 如何调整动态加载的本机 dll 的 %PATH%?

    我正在动态加载一个 NET 程序集 该程序集依赖于多个native dll 位于各个文件夹中 但只有当我的应用程序启动时这些 DLL 的文件夹位于 PATH 环境变量中时 Windows 才会找到这些 DLL 我想从程序中修改 PATH 变
  • 在 Django Tastypie API 中包含子资源

    我正在规划一个使用 Django 和 Tastypie 实现 REST API 的网站 并且 我很难找到 正确 的包含方式 返回的资源中的子资源 作为沙箱 我制作了一个带有 Ticket 模型和 TicketComment 的小应用程序 模
  • 执行和测试 stanford core nlp 示例

    我下载了 stanford core nlp 包并尝试在我的机器上测试它 使用命令 java cp mx1g edu stanford nlp sentiment SentimentPipeline file input txt 我得到的情
  • 学习异常处理模式[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 在编程中一直让我困惑的一件事是如何使用适当的异常处理 Code Complete 指出 通常 90 的代码都专注于处理异常 虽然我知道实现基本异常的基础知识 但我还没有找到针对如
  • 使用 NodeJS 的 Slack API (files.upload)

    EDITED 我正在尝试构建文件上传 API通过 Slack 提供 但我很难理解正确的格式 目前 我可以使用 API 上传文本文件 但我无法弄清楚如何上传图像 这是我的问题 我的开发服务器上有一个图像 我们将其命名为 image png 我
  • 如何创建带有可选参数的构造函数? [复制]

    这个问题在这里已经有答案了 我有 construct parameter public function construct nick query SELECT FROM Users WHERE nick nick result App r
  • 如何防止闪亮的应用程序变灰?

    我们有一个在 Heroku 中托管的闪亮应用程序 用户不活动 55 秒后 应用程序将变灰 这适用于 Chrome 和 Safari 边缘工作正常 Heroku 对此有一个默认超时 并且看起来无法使用 R 构建包对其进行修改 https gi
  • django 翻译模板 {% trans "something" %}

    好吧 我一直在疯狂地寻找这个我认为简单的问题 我使用 Django 1 4 问题是 django 不会在我的模板中翻译简单的 trans work 这就是我所做的 设置 py LANGUAGE CODE en us USE I18N Tru
  • 如何向窗口标题栏添加额外的按钮,使其正常工作?

    Firstly I want mention that I have already read all articles on SO on subject but still have no answer for my question A
  • 非原子加载可以在原子获取加载之后重新排序吗?

    众所周知 自 C 11 以来 有 6 个内存顺序 并且在文档中编写了有关std memory order acquire http en cppreference com w cpp atomic memory order 内存顺序获取 使
  • 如何设置CultureInfo.CurrentCulture?

    Using Console WriteLine System Globalization CultureInfo CurrentCulture ToString I get en US 我应该在控制面板设置中更改什么 区域和语言 以获得其他
  • SqlDateTime如何降低精度

    考虑以下程序 DateTime dateTime new DateTime 634546165144647370 SqlDateTime sqlDateTime new SqlDateTime dateTime Console WriteL
  • 从 python bdist_egg 或 bdist_wheel 中排除单个源文件

    背景 我有一个负责安全性的源文件 其中有神奇的钥匙和特定的算法 是否可以从 python Egg 或 Wheel 包中删除这个单个源文件 我已经完成了使用 Egg 命令仅发送二进制文件 python setup py bdist egg e