从 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 中排除单个源文件 的相关文章

  • 在Python中自动下载所需模块的最简单方法?

    我想发布一个我编写的 python 模块 它依赖于几个包 最简单的方法是什么 以便以编程方式下载这些软件包 以防它们在正在运行的系统上不可用 大多数这些模块应该可以通过 easy install 或 pip 或类似的东西获得 我只是想避免用
  • 未找到符号:__PyCodecInfo_GetIncrementalDecoder

    自从从 Homebrew Python 2 7 11 从 2 7 10 开始 更新后 我突然无法从 PyCharm IDE 控制台在 PyPi 上测试注册我的包 运行 作为 外部工具 python B setup py register r
  • emacs 的 Egg git 接口,提交消息为空

    我使用egg emacs有git 作为emacs中的git接口 每当我尝试实现提交 amend 时 我都会收到 GIT COMMIT AMEND gt Aborting commit due to empty commit message
  • 在 setup.py 中安装 numpy + pandas 作为依赖项

    安装中numpy pandas通过 setuptools 作为 setup py 中的依赖项对我不起作用 这与缺少依赖项无关 如果我通过安装 numpypip install numpy然后python setup py develop一切
  • 尽管我的包包含已编译的库,但轮子名称与平台无关

    我正在尝试为 Windows 生成特定于平台的二进制分发包 但是python setup py bdist wheel生成通用文件名 我需要在 setup py 中更改什么或以其他方式获得具有平台特定名称的轮子 根据我收集的信息 setup
  • 从 PyPi 下载轮子

    如何从列出的软件包中下载特定的车轮PyPi https pypi python org pypi 我假设我会使用wget or curl 但我不确定要使用哪些参数 众所周知 PyPI 很难内省 幸运的是 Debian 项目用于扫描 FTP
  • 不使用 pip 安装 pythonwheel 文件

    是否可以在不使用的情况下安装Python轮pip 我总是遇到安装问题pip 所以我通常通过复制和粘贴来手动安装库 我想知道是否有一种方法可以以类似的方式处理轮文件 我假设你有互联网接入 但是你没有有效的 pip 安装 下载点轮 wget h
  • 测试入口点贡献

    我正在编写一个指定一组入口点的 Python 模块 以便其他主机模块可以发现新的功能 我正在遵循指定的 setuptools 方法官方文档 https setuptools readthedocs io en latest userguid
  • 2015年如何从lfd安装mod_wsgi

    我如何从 lfd 网站安装 mod wsgi 因为它有轮扩展 每当我搜索如何在 wamp 上安装 mod wsgi 时 资源都会告诉我从该网站安装二进制文件 然后将 mod wsgi so 文件保留在我的 wamp 目录中 lfd 页面上有
  • 无法构建轮子 - 错误:无效命令“bdist_wheel”

    我已经尝试了这个非常相关的问题中的所有内容 为什么我无法在 python 中创建轮子 https stackoverflow com questions 26664102 why can i not create a wheel in py
  • 在 Mac OS X 上使用 pip 安装 pyopencv

    我正在尝试在 OS X Mountain Lion 中使用 pip 安装 pyopencv 但导入 setuptools 失败 以下是我的作品 setuptools中的 库 是什么 我以前没见过 我已经通过 homebrew 和其他东西安装
  • 如何禁用将包上传到 PyPi 除非将 --public 传递给上传命令

    我正在开发包并将包的开发 测试 等版本上传到本地 devpi 服务器 为了防止意外上传到PyPi 我采用了以下常见做法 setup classifiers Programming Language Python Programming La
  • 如何删除构建产品

    是否可以自动删除由生成的构建产品setup py脚本基于设置工具 我刚刚开始一个新的 Python 项目 这是我第一次使用设置工具作为一名开发人员 所以我可能会犯错 当我使用构建项目时python setup py bdist 三个目录 b
  • python 命令行应用程序的最佳布局是什么?

    什么是正确的方法 或者我会满足于good方式 布置一个中等复杂度的命令行 python 应用程序 我使用 Paster 创建了一个 Python 项目框架 它为我提供了一些文件 myproj init py MyProj egg info
  • 使用 `--pre` 选项时,pip 不匹配预发布版本

    假设您已经发布了两个预发行版 package 0 0 1 dev0 package 0 0 2 dev0 My install requires部分在setup py states package gt 0 0 2 lt 1 0 0 现在
  • 在 Ubuntu 10.4 上安装 Python-2.7

    我似乎无法正确安装 zlib 我在 Ubuntu10 4 上从源代码安装了 Python 编辑 博宾斯和卢珀帮忙了 确保安装这些包 然后重新编译 Python sudo aptitude 安装 zlib1g dev libreadline6
  • 在 pyproject.toml 的动态字段中使用 python 脚本生成的值

    我试图找到一种使用 pyproject toml 内的 python 脚本生成的值的方法 例如 假设我们有一个函数random version 我正在使用 setuptools 来构建包 import random def random v
  • centos上无法安装Pillow

    我上面有 centos 6 3 和 python 2 6 当我尝试通过 easy install 安装它时 出现以下错误 imaging c 76 20 error Python h No such file or directory In
  • 如何配置 __main__.py、__init__.py 和 setup.py 进行基本包设置?

    背景 我有一个像这样的目录结构 Package setup py src init py main py code py 我希望能够以多种不同的方式运行代码 pip install Package进而python进而from Package
  • 为什么在使用 distutils 时会创建 Egg-info 文件?

    下面是我的 setup py 我的代码中没有使用 setuptools 中的任何内容 并且我的项目没有外部依赖项 usr bin env python from distutils core import setup setup name

随机推荐

  • 同时多个 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