从以下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解释器的东西,这可能会让这个轮子在任何平台上使用?
我正在尝试为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) 我有一个项目在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 package.ext
您可以假设该包是纯python(没有本机代码). 有什么能满足这些要求吗?
我知道以下选项,每个选项都有不足之处:
.whl包需要pip安装..egg包含所有包依赖项..zip文件,但AFAICT,创建这样一个zip的最佳工具是pex(https://github.com/pantsbuild/pex),我认为不支持Windows我有一个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包创建一个bdist.该软件包包含一个LICENSE文件,该文件作为分发的一部分是必需的.
我LICENSE在我的文件中添加了对该文件的引用MANIFEST.IN,实际上在为我的包创建了一个sdist后,该LICENSE文件就在那里.
然而,似乎当我为我的package(python setup.py bdist_wheel)构建一个Python轮时,该LICENSE文件无处可见.
我熟悉setup.py的概念package_data和data_files- 但它们似乎与我的用例无关:
package_data要求LICENSE文件在Python包中,但我需要将此文件放在顶级文件夹中该项目不是Python包.
data_files要求我在安装后映射文件的目标目录,但它不是相对于项目的包,而是相对于python安装 - 我发现它非常奇怪,因为它可能取决于操作系统/平台,是否virtualenv使用等
据我所知,在一天结束时,软件包安装在site-packages安装后的"顶级文件"下面没有空间.尽管如此,我正在寻找一种方法将LICENSE文件作为我的一部分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\nRun Code Online (Sandbox Code Playgroud)\n\n我想将我的项目捆绑到一个轮子中。为此,我使用以下内容setup.py:
#!/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 )\nRun Code Online (Sandbox Code Playgroud)\n\n运行时python setup.py bdist_wheel,该examples目录包含在轮子中。我该如何防止这种情况?
根据
\n\n\n\n我希望这examples被排除在外。
最近,我只是尝试用 python 连接我的 SQL Server。所以我只是从“ http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql下载 .whl 文件。\在cmd窗口中,我使用以下命令:
\n\npip install some-package.whl\nRun Code Online (Sandbox Code Playgroud)\n\n我的电脑是window 64位,我尝试了以下所有.whl文件。\n http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql
\n\npymssql\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\nRun Code Online (Sandbox Code Playgroud)\n\n但安装失败,并显示错误消息,该系统不支持.whl文件。我应该怎么办。有人可以帮助我吗?
\n假设我有一个简单的库,它使用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_requires在setuptools确定我的轮子的 Python 标签时,wheel 忽略了选项(它应该是py36但默认的py3)。显然,我意识到我可以--python-tag py36从命令行传入,这将完成这项工作,但是我用于部署我的库的持续部署服务只接受我正在使用的发行版的名称 ( bdist_wheel)。因此,我无法传递任何命令行参数。
经过一番研究,我发现我可以从bdist_wheel类继承并覆盖python_tag成员变量,但是根据wheel README:
应该注意的是,wheel不打算用作库,因此没有稳定的公共 API。
因此,我想避免从bdist_wheel类继承,这可能会迫使我在每次发生重大更改时重写我的类。
有没有其他方法可以通过 setuptools 传递轮子的 Python 标签?
我正在尝试配置我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 ×10
python-wheel ×10
setuptools ×3
packaging ×2
setup.py ×2
windows ×2
appveyor ×1
data-files ×1
installation ×1
pip ×1
pymssql ×1
pypi ×1
python-3.x ×1
python-venv ×1
sql-server ×1
uberjar ×1