目前,我们正在设置\在系统上安装一些软件包,方法是在install_requires属性下的setup.py中提及它们的版本和依赖项.我们的系统需要python 2.7.有时,用户有多个版本的python说2.6.x和2.7,它说的一些软件包已经可用但实际上在2.6网站软件包列表下可用的系统上.还有一些用户只有2.6,如何从setup.py强制执行,或者还有其他任何方式可以说只有python 2.7和我们想要setup.py更新的所有包只有2.7.我们在机器上要求至少2.7来运行我们的代码.
谢谢!Santhosh
setup.py在使用不受支持的Python版本时,我们可以在文件中放置什么来阻止pip收集并尝试安装包?
例如,magicstack是使用特洛伊分类器列出的项目:
Programming Language :: Python :: 3 :: Only
Run Code Online (Sandbox Code Playgroud)
所以我希望以下行为如果pip --version与python 2.7绑定:
$ pip install magicstack
Collecting magicstack
Could not find a version that satisfies the requirement magicstack (from versions: )
No matching distribution found for magicstack
Run Code Online (Sandbox Code Playgroud)
但实际行为是pip收集一个版本,下载它,尝试安装它并失败.curio例如,还有其他仅支持Python3的版本,实际上安装得很好 - 因为它setup.py没有使用任何特定的Python 3 - 只在导入时失败,只使用了一些Python 3语法.而且我确定有些软件包安装正常,导入正常,可能只在运行时失败!
以pip尊重的方式指定支持的Python版本的正确方法是什么? 我找到了一个解决方法,只涉及上传一个轮文件,并拒绝上传.tar.gz发行版,但我很想知道正确的修复.
编辑:如果Python/os/architecture不匹配 ,pip如何知道不下载wheel分布?它只是使用.whl文件名约定还是比幕后更复杂?我们能不能以某种方式将元数据提供给源代码分发,以使pip使用.tar.gz上传做正确的事情?
有没有办法指定一个python版本与setup.py中定义的python包一起使用?
我的setup.py目前看起来像这样:
from distutils.core import setup
setup(
name = 'macroetym',
packages = ['macroetym'], # this must be the same as the name above
version = '0.1',
description = 'A tool for macro-etymological textual analysis.',
author = 'Jonathan Reeve',
author_email = 'jon.reeve@gmail.com',
url = 'https://github.com/JonathanReeve/macro-etym',
download_url = 'https://github.com/JonathanReeve/macro-etym/tarball/0.1', # FIXME: make a git tag and confirm that this link works
install_requires = ['Click', 'nltk', 'pycountry', 'pandas',
'matplotlib'],
include_package_data = True,
package_data = {'macroetym': ['etymwm-smaller.tsv']},
keywords = ['nlp', 'text-analysis', 'etymology'],
classifiers = …Run Code Online (Sandbox Code Playgroud) 有点跟进这个 ...... :)
我的项目只是Python 3,我的问题基本上是如何告诉distutils/distribute/who who this package是否仅限Python 3?