python distutils 不包含 SWIG 生成的模块

2023-12-26

我正在使用 distutils 从我的项目创建 rpm。我有这个目录树:

project/
        my_module/
                 data/file.dat
                 my_module1.py
                 my_module2.py
        src/
            header1.h
            header2.h
            ext_module1.cpp
            ext_module2.cpp
            swig_module.i
        setup.py
        MANIFEST.in
        MANIFEST

my setup.py:

from distutils.core import setup, Extension

module1 = Extension('my_module._module',
                sources=['src/ext_module1.cpp',
                         'src/ext_module2.cpp',
                         'src/swig_module.i'],
                swig_opts=['-c++', '-py3'],
                include_dirs=[...],
                runtime_library_dirs=[...],
                libraries=[...],
                extra_compile_args=['-Wno-write-strings'])

setup(  name            = 'my_module',
        version         = '0.6',
        author          = 'microo8',
        author_email    = '[email protected] /cdn-cgi/l/email-protection',
        description     = '',
        license         = 'GPLv3',
        url             = '',
        platforms       = ['x86_64'],
        ext_modules     = [module1],
        packages        = ['my_module'],
        package_dir     = {'my_module': 'my_module'},
        package_data    = {'my_module': ['data/*.dat']} )

my MANIFEST.in file:

include src/header1.h
include src/header2.h

the MANIFEST文件是自动生成的python3 setup.py sdist。当我跑步时python3 setup.py bdist_rpm它编译并创建正确的 rpm 包。但问题是,当我在 C++ 源上运行 SWIG 时,它会创建一个module.py包装二进制文件的文件_module.cpython32-mu.so文件,它是用module_wrap.cpp文件,并且它没有复制到my_module目录。

我必须写什么setup.py文件来自动复制 SWIG 生成的 python 模块?

我还有另一个问题:当我安装 rpm 包时,我希望创建一个可执行文件,在/usr/bin左右,运行应用程序(例如,如果my_module/my_module1.py是应用程序的启动脚本,然后我可以在 bash 中运行:$ my_module1).


问题是build_py(将 python 源代码复制到构建目录)之前build_ext,它运行 SWIG。

您可以轻松地对构建命令进行子类化并交换顺序,因此build_ext产生module1.py before build_py尝试复制它。

from distutils.command.build import build

class CustomBuild(build):
    sub_commands = [
        ('build_ext', build.has_ext_modules), 
        ('build_py', build.has_pure_modules),
        ('build_clib', build.has_c_libraries), 
        ('build_scripts', build.has_scripts),
    ]

module1 = Extension('_module1', etc...)

setup(
    cmdclass={'build': CustomBuild},
    py_modules=['module1'],
    ext_modules=[module1]
)

然而,这样做有一个问题:如果您使用的是 setuptools,而不仅仅是简单的 distutils,请运行python setup.py install不会运行自定义构建命令。这是因为 setuptools install 命令实际上并不首先运行 build 命令,它运行 Egg_info,然后运行 ​​install_lib,后者直接运行 build_py,然后运行 ​​build_ext。

因此,更好的解决方案可能是对 build 和 install 命令进行子类化,并确保 build_ext 在两者开始时运行。

from distutils.command.build import build
from setuptools.command.install import install

class CustomBuild(build):
    def run(self):
        self.run_command('build_ext')
        build.run(self)


class CustomInstall(install):
    def run(self):
        self.run_command('build_ext')
        self.do_egg_install()

setup(
    cmdclass={'build': CustomBuild, 'install': CustomInstall},
    py_modules=['module1'],
    ext_modules=[module1]
)

看起来您不需要担心 build_ext 运行两次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python distutils 不包含 SWIG 生成的模块 的相关文章

  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 将 JSON 转换为 .NET 数据集

    我正在编写一个 Java servlet 它使用http json org java http json org java 用于从 mssql 数据库读取一些数据并将结果集转换为 JSON 字符串的库 NET 客户端应用程序正在使用此 JS
  • 如何在Word宏中的TextBox中插入文本

    我在Word中创建了一个文本框 我想在其中插入文本 Sub k Dim Box As Shape Set Box ActiveDocument Shapes AddTextbox Orientation msoTextOrientation
  • 如何在谷歌地图 API v3 中一次仅显示一个信息窗口

    我们可以在谷歌地图中一次仅显示一个信息窗口 并为多个标记显示多个信息窗口吗 意味着 当我单击标记时隐藏 关闭其他信息窗口并仅显示当前标记信息窗口 Thanks 我解决的方法如下 var infoWindowsOpenCurrently A
  • C# 在方法或事件处理程序之间传递变量

    我仍在尝试学习 c 我的问题是如何将变量从 Item1 Click 传递到 Item2 Click 这与在方法之间传递它们是同一件事还是因为它们是事件处理程序而有所不同 public partial class Events System
  • K&R 第 2 版,示例 1.9 字符数组

    我对以下代码中的 getline 函数和参数定义有疑问 代码直接取自 K R 第 1 9 章 字符数组 我已将其逐字复制在这里 问题是 当我按原样编译程序时 出现三个错误 我在最后重现了这些错误 当我在出现错误的三个地方将函数和函数参数定义
  • 从 sql 修改 SSIS 目录中的连接管理器信息

    有没有办法在使用 sql 代码部署后从 ssis 目录更新连接管理器信息 我想先部署没有敏感数据的项目 执行目录 deploy project 然后通过 SQL 将用户名和密码添加到 SSIS 目录项目 有没有办法从以下位置更新连接管理器信
  • 空间域图像卷积

    我正在尝试复制结果这个链接 https stackoverflow com q 38709810 159072 using linear卷积于空间域 图像首先转换为二维double数组 然后进行卷积 图像和内核大小相同 图像在卷积之前进行填
  • 加快用最后一个非 Nan 值替换 NaN

    我想用最后一个非 NaN 值替换向量中的所有 NaN input 1 2 3 NaN NaN 2 output 1 2 3 3 3 2 我想尝试加快已有的循环速度 input 1 2 3 NaN NaN 2 if isnan input 1
  • 单击 Angular 网页中的 TableRow 时出现 StaleElementException

    div class row gridrow clickable ng scope i class col m1 s1 tiny fa fa male i div class col m3 s11 ng binding Allard div
  • 如何删除MySQL中的记录并保留最新日期

    Example table 1 ID Email Answer UpdateDate 1 email protected cdn cgi l email protection 1 2011 07 02 2 email protected c
  • Webpack 错误:configuration.module.rules[0] 有一个未知的属性“query”

    我正在关注这个教程 https www youtube com watch v iWUR04B42Hc https www youtube com watch v iWUR04B42Hc 我知道它的内容已过时 但我认为已将其正确翻译为最新版
  • ASP.Net 移动 Web 表单发生了什么?

    以前 Visual Studio 具有用于移动 Web 表单 而不是移动 SDK 的模板 它们似乎在 Visual Studio 2008 中消失了 我见过的唯一解决方案是从 Omar 下载一些模板 http blogs msdn com
  • Pandas hub_table,按列对值进行排序

    我是 Pandas 的新用户 我喜欢它 我正在尝试在 Pandas 中创建一个数据透视表 一旦我按照我想要的方式获得了数据透视表 我想按列对值进行排名 我附上了 Excel 中的图像 因为以表格格式更容易看到我想要实现的目标 链接到图像 h
  • 找到使图像在列表中唯一的像素,您可以改进暴力破解吗?

    假设我有一个字符串列表 其中每个字符串是 正好 4 个字符长并且 在列表中是唯一的 对于每个字符串 我想确定字符串中使该字符串唯一的字符的位置 所以对于三个字符串的列表 abcd abcc bbcb 对于第一个字符串 我想识别第四个位置的字
  • Windows 7 64 位中的递归

    我有这个助手类 public static class DateTimeHelper public static int GetMonthDiffrence DateTime date1 DateTime date2 if date1 gt
  • 在 QML 中检测按下并按住按钮

    我想在用户按下并按住按钮时打开上下文菜单 为了方便起见 我使用按钮 如果我做 Button text model ualabel MouseArea preventStealing true anchors fill parent onPr
  • 如何限制javafx文本字段的字符数

    我正在使用 FXML 来设置表单 但我需要设置文本字段中的字符限制 我怎样才能做到这一点 您不能直接设置字符数限制 但你可以添加一个listener to lengthProperty 文本字段的 import javafx applica
  • realloc() 的性能影响

    我有一个记录列表 一开始我不知道记录数 我需要将它们读入数组 那么 是否建议一一读取所有记录并一一进行 realloc 并在元素到来时继续增加数组大小 或者我应该花一次来识别记录数并仅进行一次 malloc 哪一个的计算成本会更低 A re
  • Xcode - 如何以编程方式在容器视图中嵌入/更改视图控制器?

    我正在尝试以编程方式设置 或更改嵌入的视图控制器里面一个控制器视图 我有 3 个不同的视图控制器 我想在容器视图中显示它们 所有这些都取决于用户是否登录 我环顾四周并尝试了一堆代码 我发现一个有效 但代码改变了自身视图 而不是视图容器视图
  • python distutils 不包含 SWIG 生成的模块

    我正在使用 distutils 从我的项目创建 rpm 我有这个目录树 project my module data file dat my module1 py my module2 py src header1 h header2 h