标签: python-wheel

如何创建Pure-Python轮

从以下setup.py文件,我试图从一个应该只包含python 2.7代码的项目创建一个纯python轮.

from setuptools import setup

setup(
    name='foo',
    version='0.0.1',
    description='',
    url='',
    install_requires=[
        'bpython',
        'Django==1.8.2',
    ],
)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行python setup.py bdist_wheel生成的wheel文件是平台特定的foo-0.0.1-cp27-none-macosx_10_9_x86_64.whlwheel文件而不是预期的foo-0.0.1-cp27-none-any.whl.当我尝试在另一个平台上安装这个轮子时,它无法说出来it is not compatible with this Python.

我需要改变一些关于setup.py文件或python解释器的东西,这可能会让这个轮子在任何平台上使用?

python setup.py python-wheel

7
推荐指数
2
解决办法
3130
查看次数

即使我的包包含已编译的库,轮名也是独立于平台的

我正在尝试为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="" …
Run Code Online (Sandbox Code Playgroud)

python setuptools python-wheel

7
推荐指数
1
解决办法
856
查看次数

'pip setup.py bdist_wheel'不再构建强制非纯轮子

我有一个项目在Linux上使用C扩展编译,但在Windows上没有它们.当我第一次产生的车轮文件在Windows上python setup.py bdist_wheel,他们成为普遍的,我无法将它们上传到PyPI将这些万向轮被优先pip用于安装在.tar.gz上传(从结果python setup.py sdist).

围绕这个的诀窍是在setup.py:

Distribution.is_pure = lambda *args: False
Run Code Online (Sandbox Code Playgroud)

或通过子类化Distribution:

class BinaryDistribution(Distribution):
    def is_pure(self):
        return False
Run Code Online (Sandbox Code Playgroud)

setup()使用extra关键字参数在setup.py中 调用distclass=BinaryDistribution,.

这一切都在我的运行Windows XP 64的VM上运行良好,该版本具有32和64位版本的Python 2.6/2.7/3.3/3.4和pypy,仅用于此目的.一个简单的批处理文件给了我:

dist/pkg-1.0-cp26-none-win32.whl
dist/pkg-1.0-cp26-none-win_amd64.whl
dist/pkg-1.0-cp27-none-win32.whl
dist/pkg-1.0-cp27-none-win_amd64.whl
dist/pkg-1.0-cp33-none-win32.whl
dist/pkg-1.0-cp33-none-win_amd64.whl
dist/pkg-1.0-cp34-none-win32.whl
dist/pkg-1.0-cp34-none-win_amd64.whl
Run Code Online (Sandbox Code Playgroud)

pip当你pip在Windows上运行时,适当的软件包可以下载和安装,当你pip在Linux上运行时,你可以获得

pkg-1.0.tar.gz
Run Code Online (Sandbox Code Playgroud)

其中包括在安装过程中编译的C源代码.

问题始于我没有备用Windows 7许可的机器,我可以安装Python 3.5(它不安装在EOL XP上).所以我调查了Appveyor并创建了appveyor.yml:

environment:
  matrix:
    - PYTHON: C:\Python27
    - PYTHON: C:\Python33
    - PYTHON: C:\Python34
    - PYTHON: C:\Python35
    - PYTHON: …
Run Code Online (Sandbox Code Playgroud)

python windows pypi appveyor python-wheel

7
推荐指数
3
解决办法
4750
查看次数

Python相当于uber-jar

我正在寻找蟒蛇世界中相当于超级罐的东西.

  • 我需要将python包分发到所有三个主要平台(Windows,Mac,Linux).
  • 它必须与其所有依赖项捆绑在一起,因为目标平台可能缺少互联网.
  • 它必须是跨平台分发,因此我不必为多个目标构建.也就是说,我应该可以在所有平台上运行它,如下所示:

    python package.ext

您可以假设该包是纯python(没有本机代码). 有什么能满足这些要求吗?

我知道以下选项,每个选项都有不足之处:

python windows packaging uberjar python-wheel

7
推荐指数
1
解决办法
667
查看次数

什么需要在setup.py中创建一个轮子?

我有一个Python项目prj,我们可以将其描述为文件夹和requirements.txt文件的集合:

[prj/fold1, prj/fold2,..., prj/foldN, prj/requirements.txt]
Run Code Online (Sandbox Code Playgroud)

我想打包这个项目,以便它可以很容易地安装在其他计算机上.我的理解是我需要添加一个setup.py文件,但有些东西我不明白.

我应该在setup.py文件中写什么才能创建轮包?您能提供打包项目所需文件和命令的示例吗?

编辑:

我有这个setup.py:

(virtual_env_test) lpuggini@lpuggini-T3420:~/mlp/trunk$ cat setup.py                                                                                                                                               

    from setuptools import setup                                                                                                                                                                                       


    setup(name='mlearn',                                                                                                                                                                                               
          version='0.1',                                                                                                                                                                                               
          description='Tool to learn ip addresses on a network.',                                                                                                                                                      
          author='Corvil',                                                                                                                                                                                             
          author_email='...',                                                                                                                                                                                          
          packages=['common', 'iplearning', 'applearning', 'peerspeak'],                                                                                                                                               
          package_dir={                                                                                                                                                                                                
              'common':'common',                                                                                                                                                                                       
              'iplearning': 'iplearning',                                                                                                                                                                              
              'applearning': 'applearning',                                                                                                                                                                            
              'peerspeak':'peers_peak'},                                                                                                                                                                               
          )                                                                                                                                                                                                            
    (virtual_env_test) lpuggini@lpuggini-T3420:~/mlp/trunk$    
Run Code Online (Sandbox Code Playgroud)

我跑了:

   (virtual_env_test) lpuggini@lpuggini-T3420:~/mlp/trunk$ python setup.py bdist_wheel                                                                                                                                
    running bdist_wheel                                                                                                                                                                                                
    running build                                                                                                                                                                                                      
    running build_py                                                                                                                                                                                                   
    package init file 'iplearning/__init__.py' not found (or not a regular file)                                                                                                                                       
    package init file 'applearning/__init__.py' not found …
Run Code Online (Sandbox Code Playgroud)

python setup.py python-wheel

7
推荐指数
1
解决办法
2421
查看次数

如何使用python二进制发行版传送数据文件?

我想为我的Python包创建一个bdist.该软件包包含一个LICENSE文件,该文件作为分发的一部分是必需的.

LICENSE在我的文件中添加了对该文件的引用MANIFEST.IN,实际上在为我的包创建了一个sdist后,该LICENSE文件就在那里.

然而,似乎当我为我的package(python setup.py bdist_wheel)构建一个Python轮时,该LICENSE文件无处可见.

我熟悉setup.py的概念package_datadata_files- 但它们似乎与我的用例无关: package_data要求LICENSE文件在Python包中,但我需要将此文件放在顶级文件夹中该项目不是Python包. data_files要求我在安装后映射文件的目标目录,但它不是相对于项目的包,而是相对于python安装 - 我发现它非常奇怪,因为它可能取决于操作系统/平台,是否virtualenv使用等

据我所知,在一天结束时,软件包安装在site-packages安装后的"顶级文件"下面没有空间.尽管如此,我正在寻找一种方法将LICENSE文件作为我的一部分wheel,即使它在安装过程中没有被复制到任何特定位置.

python packaging data-files python-wheel

7
推荐指数
1
解决办法
504
查看次数

Python 打包:从 bdist_wheel 中排除目录

我有以下项目结构:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docs\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 examples\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 MANIFEST.in\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.rst\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 myproject\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想将我的项目捆绑到一个轮子中。为此,我使用以下内容setup.py

\n\n
#!/usr/bin/env python\n\nfrom setuptools import setup, find_packages\n\nsetup(name=\'myproject\',\n      version=\'1.0\',\n      description=\'Great project\'\n      long_description=open(\'README.rst\').read(),\n      author=\'Myself\'\n      packages=find_packages(exclude=[\'tests\',\'test\',\'examples\'])\n     )\n
Run Code Online (Sandbox Code Playgroud)\n\n

运行时python setup.py bdist_wheel,该examples目录包含在轮子中。我该如何防止这种情况?

\n\n

根据

\n\n

从 setuptools 包中排除顶级目录

\n\n

我希望这examples被排除在外。

\n

python setuptools python-wheel

6
推荐指数
1
解决办法
3085
查看次数

安装Python包时如何判断支持哪个版本的.whl文件

最近,我只是尝试用 python 连接我的 SQL Server。所以我只是从“ http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql下载 .whl 文件。\在cmd窗口中,我使用以下命令:

\n\n
pip install some-package.whl\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的电脑是window 64位,我尝试了以下所有.whl文件。\n http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql

\n\n
pymssql\xe2\x80\x911.0.3\xe2\x80\x91cp27\xe2\x80\x91none\xe2\x80\x91win32.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp27\xe2\x80\x91cp27m\xe2\x80\x91win32.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp27\xe2\x80\x91cp27m\xe2\x80\x91win_amd64.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp34\xe2\x80\x91cp34m\xe2\x80\x91win32.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp34\xe2\x80\x91cp34m\xe2\x80\x91win_amd64.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp35\xe2\x80\x91cp35m\xe2\x80\x91win32.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp35\xe2\x80\x91cp35m\xe2\x80\x91win_amd64.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp36\xe2\x80\x91cp36m\xe2\x80\x91win32.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp36\xe2\x80\x91cp36m\xe2\x80\x91win_amd64.whl\n
Run Code Online (Sandbox Code Playgroud)\n\n

但安装失败,并显示错误消息,该系统不支持.whl文件。我应该怎么办。有人可以帮助我吗?

\n

python sql-server installation pymssql python-wheel

6
推荐指数
2
解决办法
5512
查看次数

如何使用 setuptools 将 Python 标记添加到 bdist_wheel 命令?

假设我有一个简单的库,它使用setuptools进行打包和分发。在这种情况下,库还需要最低版本的 Python 3.6,这意味着我的 setup.py 将如下所示:

from setuptools import setup, find_packages

setup(
    name='something',
    version='0.0.1',

    description='description',
    long_description=long_description,

    # More metadata

    packages=find_packages(exclude=['tests', 'docs']),

    python_requires='>=3.6'
)
Run Code Online (Sandbox Code Playgroud)

现在,当我运行时python setup.py bdist_wheel,我得到一个名为something-0.0.1-py3-none-any.whl. 在这里很明显,python_requiressetuptools确定我的轮子的 Python 标签时,wheel 忽略了选项(它应该是py36但默认的py3)。显然,我意识到我可以--python-tag py36从命令行传入,这将完成这项工作,但是我用于部署我的库的持续部署服务只接受我正在使用的发行版的名称 ( bdist_wheel)。因此,我无法传递任何命令行参数。

经过一番研究,我发现我可以从bdist_wheel类继承并覆盖python_tag成员变量,但是根据wheel README:

应该注意的是,wheel打算用作库,因此没有稳定的公共 API。

因此,我想避免从bdist_wheel类继承,这可能会迫使我在每次发生重大更改时重写我的类。

有没有其他方法可以通过 setuptools 传递轮子的 Python 标签?

python setuptools continuous-deployment python-wheel

6
推荐指数
1
解决办法
2783
查看次数

从requirements.txt中安装车轮

我正在尝试配置我requirements.txt的以下内容:

wheel
apache-airflow
Run Code Online (Sandbox Code Playgroud)

我创建python3.8 -m venv ~/test-env并尝试进行安装。问题是

python -m pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

产生大量消息

error: invalid command 'bdist_wheel'                                                                                                                                                                                            

----------------------------------------                                                                                                                                                                                        
Failed building wheel for thrift        
Run Code Online (Sandbox Code Playgroud)

我确保wheel在安装时requirements.txt安装了它:

Collecting wheel (from -r requirements.txt (line 1))                                                                                                                                                                              
Using cached https://files.pythonhosted.org/packages/00/83/b4a77d044e78ad1a45610eb88f745be2fd2c6d658f9798a15e384b7d57c9/wheel-0.33.6-py2.py3-none-any.
Run Code Online (Sandbox Code Playgroud)

但是如果我单独安装

python -m pip install wheel
python -m pip install -r requirements
Run Code Online (Sandbox Code Playgroud)

它工作正常,并且python -m pip -r requirements没有错误消息。

那么是不是可以将wheel安装放入requirements.txt?安装时处理它的正确方法是什么venv?安装前要requirements.txt安装吗?

python pip python-3.x python-venv python-wheel

6
推荐指数
1
解决办法
6284
查看次数