草庐IT

python - 车轮名称与平台无关,即使我的包包含已编译的库

coder 2023-08-24 原文

我正在尝试为 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 安装时,包在目标平台上按预期运行,但在替代平台上当然会失败。最后,我想在 32 位和 64 位 Windows 以及 64 位 Linux 上支持 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 .然后 Setuptools 知道二进制发行版不再与平台无关,并且生成的轮子等被适当命名。我的解决方案是继续编写一个 Cython 扩展以提供一些有用的功能以与我的包装类集成。

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

关于python - 车轮名称与平台无关,即使我的包包含已编译的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34959078/

有关python - 车轮名称与平台无关,即使我的包包含已编译的库的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  3. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  4. ruby - 我可以将我的 README.textile 以正确的格式放入我的 RDoc 中吗? - 2

    我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:

  5. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  6. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

  7. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  8. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  9. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  10. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

随机推荐