车轮名称与平台无关,即使我的包包含已编译的库
Wheel names are platform independent even though my package includes compiled libraries
我正在尝试为 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。然后 Setuptools 知道二进制发行版不再与平台无关,并且生成的轮子等被适当命名。我的解决方案是继续编写一个 Cython 扩展以提供一些有用的功能以与我的包装器集成 类.
大概继承 Distribution 并设置 is_pure=false
应该可以完成同样的事情,但事实并非如此。我没有对此进行进一步调查。
我正在尝试为 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。然后 Setuptools 知道二进制发行版不再与平台无关,并且生成的轮子等被适当命名。我的解决方案是继续编写一个 Cython 扩展以提供一些有用的功能以与我的包装器集成 类.
大概继承 Distribution 并设置 is_pure=false
应该可以完成同样的事情,但事实并非如此。我没有对此进行进一步调查。