如何在 setup.py 中引导 numpy 安装

2024-07-03

我有一个项目,它有一个 C 扩展,需要 numpy。理想情况下,我希望下载我的项目的人都能够运行python setup.py install或使用一个电话pip。我遇到的问题是在我的setup.py我需要导入 numpy 来获取标题的位置,但我希望 numpy 只是一个常规要求install_requires这样它就会自动从Python包索引下载。

这是我正在尝试做的事情的示例:

from setuptools import setup, Extension
import numpy as np

ext_modules = [Extension('vme', ['vme.c'], extra_link_args=['-lvme'],
                         include_dirs=[np.get_include()])]

setup(name='vme',
      version='0.1',
      description='Module for communicating over VME with CAEN digitizers.',
      ext_modules=ext_modules,
      install_requires=['numpy','pyzmq', 'Sphinx'])

显然,我不能import numpy在安装之前位于顶部。我见过一个setup_requires参数传递给setup()但找不到任何有关其用途的文档。

这可能吗?


以下至少适用于 numpy1.8 和 python{2.6,2.7,3.3}:

from setuptools import setup
from setuptools.command.build_ext import build_ext as _build_ext

class build_ext(_build_ext):
    def finalize_options(self):
        _build_ext.finalize_options(self)
        # Prevent numpy from thinking it is still in its setup process:
        __builtins__.__NUMPY_SETUP__ = False
        import numpy
        self.include_dirs.append(numpy.get_include())

setup(
    ...
    cmdclass={'build_ext':build_ext},
    setup_requires=['numpy'],
    ...
)

有关一个小解释,请参阅为什么它在没有“hack”的情况下失败,请参阅这个答案 https://stackoverflow.com/a/21621493/650222.

请注意,使用setup_requires有一个微妙的缺点:numpy 不仅会在构建扩展之前进行编译,而且还会在执行时进行编译python setup.py --help, 例如。为了避免这种情况,您可以检查命令行选项,如建议的那样https://github.com/scipy/scipy/blob/master/setup.py#L205 https://github.com/scipy/scipy/blob/9ccc68475fc431c4a44c120693cf6878cc4c14a7/setup.py#L205,但另一方面,我真的认为这不值得付出努力。

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

如何在 setup.py 中引导 numpy 安装 的相关文章

  • 使用 Scipy 将字典从 Python 保存到 Matlab

    我发现将整齐生成的数据保存到 mat 文件中时遇到一些问题 我认为使用 Scipy 更简单 但似乎我弄错了 这是我要保存的数据的示例 out features array 5 00088905e 01 1 51847522e 01 4 93
  • 导入文本文件:没有要从文件中解析的列

    我正在尝试从 sys stdin 获取输入 这是hadoop 的map reducer 程序 输入文件为txt格式 数据集预览 196 242 3 881250949 186 302 3 891717742 22 377 1 8788871
  • matlab的imregionalmax()和scipy.ndimage.filters.maximum_filter有什么区别

    我需要找到图像的区域最大值以获得用于分水岭分割的前景标记 我在 matlab 中看到使用该函数imregionalmax http www mathworks com help images ref imregionalmax html 由
  • 从Python运行Scrapy

    我正在尝试从 Python 运行 Scrapy 我正在查看这段代码 source http doc scrapy org en 0 16 topics practices html from twisted internet import
  • networkx - 根据列表或字典值更改节点大小

    我正在尝试在networkx中制作一个图表 我在为节点分配不同的节点大小时遇到 问题 这是我一直在玩的代码 import sys from collections import defaultdict import networkx as
  • ipython:如何设置终端宽度

    当我使用ipython terminal并想要打印一个numpy ndarray它有很多列 行会在大约 80 个字符处自动断行 即行的宽度为 cca 80 个字符 z zeros 2 20 print z 据推测 ipython 预计我的终
  • ModuleNotFoundError:没有名为“binance.client”的模块; “binance”不是一个包

    嘿 我是 Stack Over Flow 和 Python 的新手 但想学习并希望有人可以帮助我 我正在尝试在 python 中开发一个币安交易机器人 请参阅下面我的脚本 from binance client import Client
  • 了解 Python 2.7 中 io.open() 方法的缓冲参数

    我试图理解的缓冲参数io open https docs python org 2 library functions html openPython 2 7 中的方法 我在Python解释器中执行 import utils buffer
  • 如何覆盖 nltk 的 pos_tag 分配给文本的 POS 标签?

    我使用 nltk 中的 pos tag 来标记一组 未标记的 技术文档中的文本并获得良好的结果 但它总是将 authenticated 等单词标记为动词 而有时它可以用作形容词 换句话说 仅仅改变标签并不是每次都有效 是否有一个好方法来覆盖
  • 解析srt字幕

    我想解析srt字幕 1 00 00 12 815 gt 00 00 14 509 Chlapi jak to jde s t ma pracovn ma sv tlama 2 00 00 14 815 gt 00 00 16 498 Tro
  • 添加 prefix_with 子句以插入特定类

    我怎样才能定制prefix withSQLAlchemy 中的每个模型类 以便每个模型类都可以有不同的插入语句 我其实想要OR IGNORE子句添加到某些类中 PS 我对 SQLAlchemy 比较陌生 ORM 没有挂钩它的生成方式inse
  • 模板内嵌套 for 循环

    模型 py class Task models Model level models ForeignKey Level on delete models CASCADE todo models ForeignKey ToDo on dele
  • 如何从python3中的单行输入读取整数数组

    我想从 python3 中的单行输入读取整数数组 例如 将此数组读取到变量 列表 1 3 5 7 9 我尝试过的 arr input split 但这不会将它们转换为整数 它创建字符串数组 arr input split for i val
  • 如何在 setup.py 中运行 Makefile?

    我需要编译ICU http icu project org使用它自己的构建机制 因此问题是 我怎样才能运行一个Makefilesetup py 显然 我只希望它在构建过程中运行 而不是在安装时运行 我通常使用的方法是覆盖有问题的命令 fro
  • pyqt 中的代码编辑器示例

    我尝试学习一些Qt PyQt 为此 我使用了代码编辑器示例 http doc qt io qt 4 8 qt widgets codeeditor example html的文档 当前行的突出显示效果很好 但行号不显示 实际上LineNum
  • Python 解释器优化

    假设我有一个字符串x Python 解释器是否足够聪明 能够知道 string replace x x 应转换为NOP 我怎样才能找到这个 是否有任何参考资料显示解释器能够根据句法分析动态执行哪种类型的优化 不 Python 不能对 NOP
  • 使用 setuptools 从私有 Gitlab 包存储库安装 Python 包

    我为我的雇主创建了一个私人套餐 由于我被禁止将其上传到 PyPI 它是专有的 因此我将其上传到我们私人 Gitlab 中心上的项目的包索引中 我可以手动安装它 pip install my package extra index url h
  • 在 Python 中访问 Firefox 3 cookie

    我正在尝试制作一个 python 脚本 该脚本将在 Firefox 中使用 cookie 访问网站 如果 cookielib MozillaCookieJar 支持 Firefox 3 它就会工作 有没有办法在 python 中访问 Fir
  • Python Selenium Webdriver - 代理身份验证

    我想将 Selenium Webdriver 与需要用户身份验证的代理一起使用 这可能吗 这就是我到目前为止所拥有的 但我不知道在哪里放置凭据 user pass proxy port from selenium import webdri
  • 在Python中返回外部函数错误

    这就是问题 给定以下 Python 程序 假设用户从键盘输入数字 4 返回的值是多少 N int input enter a positive integer counter 1 while N gt 0 counter counter N

随机推荐

  • git with --git-dir= 导致“不是 git 存储库”

    我的一个 iOS 应用程序中有一个脚本 它应该获取 git 修订哈希并将其放入版本号中 在此脚本中 我运行 git git dir PROJECT DIR show s pretty format h 但是 我收到消息说该目录不是 git
  • 禁止 Spring Cloud Gateway 中未经身份验证的请求

    我在 Spring Cloud Gateway 中实现了自定义预过滤器 它允许经过身份验证的请求通过下游过程 我想要的是 如果请求未经身份验证 则返回 401 UNAUTHORIZE 状态响应并停止下游处理 我可以实现这个spring cl
  • 禁止 Spring Cloud Gateway 中未经身份验证的请求

    我在 Spring Cloud Gateway 中实现了自定义预过滤器 它允许经过身份验证的请求通过下游过程 我想要的是 如果请求未经身份验证 则返回 401 UNAUTHORIZE 状态响应并停止下游处理 我可以实现这个spring cl
  • matlab/八度随机事件ode45

    我在理解如何在 Octave Matlab 中实现事件以及微分方程的求解方面遇到了一些困难 例如 考虑这个简单的代码来求解微分方程 y y function dy odefun t y dy y endfunction options od
  • 在 redshift 上查询数据时出错 - 获取条带数据时出错

    我正在尝试在 redshift 中的外部表上运行以下查询 select from schema table limit 10 我收到一个错误 2018 06 20 12 03 14 XX000 500310 Amazon 无效操作 S3 查
  • matlab/八度随机事件ode45

    我在理解如何在 Octave Matlab 中实现事件以及微分方程的求解方面遇到了一些困难 例如 考虑这个简单的代码来求解微分方程 y y function dy odefun t y dy y endfunction options od
  • 有没有办法先在主窗口上搜索 webelement,如果找不到,然后开始在 iframe 内搜索?

    要求 默认情况下 在主窗口上搜索 webelement 如果找到则执行操作 否则在 iframe 内搜索 webelement 并执行所需的操作 硒 3 141 WebElement el driver findElement By xpa
  • 有没有办法先在主窗口上搜索 webelement,如果找不到,然后开始在 iframe 内搜索?

    要求 默认情况下 在主窗口上搜索 webelement 如果找到则执行操作 否则在 iframe 内搜索 webelement 并执行所需的操作 硒 3 141 WebElement el driver findElement By xpa
  • 更改 SQL Server 中的列

    什么是正确的语法ALTER语句向现有列添加默认值 我可以毫无错误地添加新列 ALTER TABLE tb TableName ADD Record Status varchar 20 但是如果我尝试使用以下语句更改现有列以应用默认值 ALT
  • 更改 SQL Server 中的列

    什么是正确的语法ALTER语句向现有列添加默认值 我可以毫无错误地添加新列 ALTER TABLE tb TableName ADD Record Status varchar 20 但是如果我尝试使用以下语句更改现有列以应用默认值 ALT
  • 使用 Java 的默认包是一种不好的做法吗?

    使用 Java 的默认包是一种不好的做法吗 是的 理想情况下 包名称应该是全局唯一的 以避免命名冲突 使用默认包打破了这一约定 也不可能从默认包中导入类 如果未命名的包是一个坏主意 为什么还要存在呢 从JLS 7 4 2 http java
  • Kafka:偏移序列

    每条发布的消息 假设消息被压缩 是否都会分配一个唯一的偏移量 并在给定分区内保持顺序和增量 另外 offset 序列是否可以重置自身 这意味着它可以从0开始 官方文档 https kafka apache org documentation
  • Postgres 中的动态 UNION ALL 查询

    我们使用 Postgres PostGis 连接来获取通过地理服务器发布的数据 查询现在看起来像这样 SELECT row number over ORDER BY a ogc fid AS qid a wkb geometry AS ge
  • Postgres 中的动态 UNION ALL 查询

    我们使用 Postgres PostGis 连接来获取通过地理服务器发布的数据 查询现在看起来像这样 SELECT row number over ORDER BY a ogc fid AS qid a wkb geometry AS ge
  • 如何在 c# 中包含 AutomationElement?我需要补充什么?

    我无法初始化 AutomationElement AutomationElement element AutomationElement FromHandle process MainWindowHandle 它突出显示 Automatio
  • 能够使用 MS bot 框架接收文件

    我可能有点早了 但是是否也可以使用新的 Microsoft Bot Framework 接收文件 主要通过 Skype 我在文档中找不到任何内容 I found IList
  • 能够使用 MS bot 框架接收文件

    我可能有点早了 但是是否也可以使用新的 Microsoft Bot Framework 接收文件 主要通过 Skype 我在文档中找不到任何内容 I found IList
  • 上下文 sp_OAMethod“发送”中的 msxml3.dll

    Win2003 SQL Server 2005 中的工作代码在 Win2012 SQL Server 2012 sp1 下无法工作 唯一 真实solution https social msdn microsoft com 443 Foru
  • 如何从 Dart 中的字符串中删除换行符?

    如何从 Dart 中的字符串中删除换行符 例如 我想转换 hello nworld to hello world 您可以使用replaceAll 模式 替换 main var multiline hello nworld var singl
  • 如何在 setup.py 中引导 numpy 安装

    我有一个项目 它有一个 C 扩展 需要 numpy 理想情况下 我希望下载我的项目的人都能够运行python setup py install或使用一个电话pip 我遇到的问题是在我的setup py我需要导入 numpy 来获取标题的位置