尽管我的包包含已编译的库,但轮子名称与平台无关

2024-03-19

我正在尝试为 Windows 生成特定于平台的二进制分发包,但是python setup.py bdist_wheel生成通用文件名。我需要在 setup.py 中更改什么或以其他方式获得具有平台特定名称的轮子?根据我收集的信息,setuptools 应该能够识别软件包何时不通用,但这对我不起作用。

我正在从事的项目使用 cmake 和 mingw w64 编译库的多个变体。这些编译的库当然是特定于 32/64 位的。为了创建单独的发行版,我为目标平台创建了一个 virtualenv,从中编译库。然后将编译后的库复制到 python 包中进行轮转。

这是我的 setup.py。 pyfvs_files 是要包含的已编译“*.pyd”文件的列表。这会产生名为“pyfvs-0.0.1a0-py27-none-any.whl”的轮子,我希望它是“pyfvs-0.0.1a0-py27-none-win32.whl”和“pyfvs-0.0.1a0-py27” -none-win_amd64.whl'。通过 pip 安装时,包可以按目标平台的预期运行,但在备用平台上当然会失败。最终我希望在 Windows 32 和 64 位以及 Linux 64 位上支持 Python 2.7、3.4、3.5。

import os
from glob import glob

from setuptools import setup
from setuptools.dist import Distribution

# TODO: Get the version from the git tag and or revision.
version = '0.0.1a0'

if os.name=='nt':
    so_ext = 'pyd'
else:
    so_ext = 'so'

pyfvs_files = glob('pyfvs/*.{}'.format(so_ext))
pyfvs_files.extend(['pyfvs/pyfvs.cfg',])

description = open('./README.txt').readline().strip()
long_desc = open('./README.txt').read().strip()

class BinaryDistribution(Distribution):
    def is_pure(self):
        return False

setup(
    name='pyfvs'
    , version=version
    , description=description
    , long_description=long_desc
    , url=''
    , author=""
    , author_email=""
    , packages=['pyfvs',]
    , include_package_data=True
    , distclass=BinaryDistribution
    , data_files = [
            ('pyfvs',pyfvs_files)
            , ('pyfvs/docs',glob('pyfvs/docs/*'))
            , ('pyfvs/examples',glob('pyfvs/examples/*'))
            , ('pyfvs/test',glob('pyfvs/test/*'))
            ]
    , entry_points={
            'console_scripts': [
            'fvs=pyfvs.__main__:main'
            ]
        }
    , classifiers=[
            'Development Status :: 3 - Alpha'
            , 'Environment :: Console'
            , 'Intended Audience :: Developers'
            , 'Intended Audience :: End Users/Desktop'
            , 'Intended Audience :: Science/Research'
            , 'Natural Language :: English'
            , 'Programming Language :: Python'
            , 'Programming Language :: Fortran'
            ]
    , keywords=''
    )

我没有找到解决方案,但解决方法是在设置中包含 C 扩展,按照建议,一个小的虚拟库就足够了here https://github.com/numenta/nupic.core/pull/774。然后,Setuptools 就会知道二进制发行版不再独立于平台,并且生成的轮子等会被适当命名。我的解决方案是继续编写 Cython 扩展以提供一些有用的函数来与我的包装器类集成。

大概是对 Distribution 进行子类化并设置is_pure=false应该完成同样的事情,但事实并非如此。我没有进一步调查这一点。

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

尽管我的包包含已编译的库,但轮子名称与平台无关 的相关文章

随机推荐

  • 在 jQuery 中获取鼠标滚轮事件?

    有没有办法获取鼠标滚轮事件 不讲scroll事件 在 jQuery 中 document ready function foo bind mousewheel function e if e originalEvent wheelDelta
  • 如何使用QMake的子目录模板?

    我开始学习Qt 我即将离开 Visual Studio 世界 正在寻找一种使用 QMake 组织项目结构的方法 我找到了 子目录 模板 但我很难理解它 我的项目结构如下所示 project dir main cpp project pro
  • 如何将 Room 数据库导出为 .db 以下载文件以便稍后使用?

    如何将 Room 数据库导出到 db 文件以便稍后使用 我想将其导出到 Android 设备存储中的下载文件夹 我已经设置导出到 CSV 但现在我需要导出到 db 这样 如果用户正在切换设备并且需要其他设备上的数据 我可以重新导入它 有没有
  • 排毒笑话测试不是并行运行的

    使用 Jest 实现自动化排毒 您好 我正在使用以下命令从 CLI 运行排毒测试 detox test r maxWorkers 2 实现并行执行 已经有一个模拟器以名称 iphone 5s Detox 启动 并以 maxWorkers 2
  • 标签可以在 git filter-branch 和 rebase 之后自动移动吗?

    edit问题归结为 可以git rebase也被指示对标签进行变基吗 但是对最初问题的回答也会有所帮助 Asking 如何将过去添加到 git 存储库中 https stackoverflow com questions 3147097 h
  • Word 和 Python - 创建目录

    我正在使用 python 的 pywin32 client 扩展并构建 Word 文档 我尝试了很多很好的方法来生成目录 但都失败了 我认为我想要做的是调用 ActiveDocument 对象并使用 MSDN 页面中的以下示例创建一个对象
  • Yii ,从 $_FILES 保存图像,但不使用模型

    这可能吗 这是有模型的 CUploadedFile getInstance model newsimage model gt image gt saveAs image path 但我不想创建模型只是为了保存我的图像 我实际上需要这个的目的
  • 保存的位图是黑色的

    我创建了一个带有文本的位图 我可以在图像视图中查看它 但是当我保存位图时 我只得到一个黑色图像 我花了三个小时研究类似的问题 但没有一个对我有用 这是代码 谢谢你的帮助 public void createBitmap Bitmap Lab
  • 使用中间服务器创建点对点连接

    我想连接两个客户端 通过 TCP IP 套接字 客户端可以使用中间服务器发现彼此 一旦客户端发现彼此 服务器就不应该有任何参与 我对此做了一些研究 发现很多人建议JXTA 但我想自己从头开始创建协议 因为将来我可能也必须使用 WebSock
  • 如何通过存储在字符串变量中的名称获取 XAML 元素?

    例如 我有一个 UIElement
  • 使用电子邮件地址和应用程序密码从 oauth2/token 获取访问令牌

    我们对 Active Directory 下的电子邮件地址使用强制两因素身份验证 我有一个需要服务帐户的应用程序 因此我们为该服务帐户创建了应用程序密码 我们使用以下端点获取访问令牌 https login windows net tena
  • jquery setTimeout 或 setInterval

    我有以下带有 if 条件的代码 if oldMembership lt newMembership var digit ul indexSiteCounterBottom empty for i 0 i lt 9 i if membersh
  • 如何关闭 Invoke-WebRequest 打开的 IE 会话

    我在我的脚本中注意到Invoke WebRequest正在启动 Internet Explorer 大概是为了解析 DOM 有没有办法在脚本结束时关闭这些 IE 会话以进行清理 The line highlighted in red is
  • onDestroy 中 AsyncTask.execute 的含义

    我的代码中运行着这段代码onDestroy功能 Override protected void onDestroy if null theUser glideId JSONObject req new JSONObject try req
  • PHP 按类型对目录中的文件进行排序

    我编写了以下 PHP 代码来显示目录中的文件 它使用 JQuery 来展开文件夹 一切正常 但现在它按字母顺序混合文件类型显示所有文件 我想保留字母顺序 但单独显示文件夹和文件 如何对显示的文件进行排序 以便文件夹显示在顶部 其他文件显示在
  • Typescript 中是否有类似 ReturnType 的 ArgumentsType

    ReturnType
  • 超时错误 - DHL API 到 Google Sheets - UrlFetchApp

    在Python中 我使用浏览器的开发人员选项捕获的请求中的 请求标头 作为标头 并且工作正常 我尝试了与 Apps 脚本相同的操作 但是UrlFetchApp检索Timeout exception function WS var myHea
  • java中有没有一个命令可以测量执行时间?

    java中有没有一个命令可以测量执行时间 就像是 System out println execution time 在代码的末尾 这里有一个完整且稍作修改的示例 http www rgagnon com javadetails java
  • 如何报告后台任务的进度?

    我有一个长时间运行的任务 正在 ExecutorService 线程池的后台执行 就该任务返回进度或中间结果而言 有哪些最佳实践 有没有提供此功能的库 编辑 为了澄清 我正在谈论向其他代码报告进度 而不是向用户报告进度 通常我会使用 Swi
  • 尽管我的包包含已编译的库,但轮子名称与平台无关

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