找不到满足pytz需求的版本。

58

我在虚拟环境中安装pytz时遇到了问题。

正在下载/提取pytz
无法找到满足要求的版本pytz(来自版本:2009r、2008b、2009f、2008c、2007g、2011g、2005m、2011e、2007f、2011k、2007k、2006j、2008h、2008i、2011e、2008a、2009e、2006g、2011j、2010l、2005m、2008i、2005k、2008g、2007c、2007i、2009l、2009r、2006j、2011k、2007d、2006p、2009i、2009u、2007i、2009f、2010g、2008h、2009a、2007g、2011e、2006p、2012b、2010k、2005r、2007f、2009l、2009p、2008c、2009j、2008g、2010g、2010h、2011h、2010k、2007c、2007d、2011d、2009l、2011c、2008a、2005m、2007k、2009n、2011d、2010o、2013b、2012h、2010e、2012c、2012d、2012f、2011n、2011b、2011j、2008c、2012j、2007k、2009f、2009d、2010e、2010b、2013b、2011d、2009p、2008h、2005r、2009i、2009n、2009a、2010k、2008g、2006g、2008b、2012c、2009i、2007g、2012c、2010h、2011n、2012g、2007d、2008a、2009u、2012g、2010o、2006p、2010b、2009u、2012d、2011k、2012f、2009a、2007f、2011h、2010l、2009j、2011g、2009g、2009g、2005r、2011c、2012g、2009g、2012d、2009j、2010o、2007c、2010g、2006g、2009d、2010h、2005k、2006j、2010b、2009n、2011g、2011c、2012b、2009e、2009d、2011j、2007i、2012j、2010l、2009r、2012h、2010e、2009p、2008i、2012f、2009e、2012b、2011h、2005k、2008b、2013b、2011n、2012j、2004b)
清理中...
没有与pytz版本匹配的分发。

看起来这是pip最新版本的问题。

是否有任何解决方法?


24
尝试运行命令 pip install --pre pytz,可安装预发布版本的pytz库。 - falsetru
1
@falsetru 那个注释应该在 Bold 72 上。 - MGP
如果你正在尝试安装askbot,先运行上述命令,如果"pip install askbot"在安装pytz时失败,这个问题似乎会得到解决。我曾在Amazon的Ubuntu 12.04 AMI上尝试安装askbot时遇到过这个问题。 - Eric Twilegar
1
好消息:--pre不再需要:版本编号方案已更改:https://bugs.launchpad.net/pytz/+bug/1224858 - guettli
2个回答

79

使用pip v1.4或更高版本安装pytz时会出现此错误,原因是由于以下行为变化:

预发布版本

从v1.4开始,默认情况下,pip仅安装符合PEP426规范的稳定版本。如果无法将某个版本解析为符合PEP426规范的版本,则假定该版本为预发布版本。

如果要求说明符包括预发布版本或开发版本(例如>=0.0.dev0),则pip将允许该要求的预发布版本和开发版本。这不包括!=标志。

pip install命令还支持--pre标志,可启用安装预发布版本和开发版本。

pytz软件包的版本标识符格式为2013bPEP426使用PEP440中描述的版本标识符,该规范指定:

Public version identifiers MUST comply with the following scheme:

N[.N]+[{a|b|c|rc}N][.postN][.devN]
因为像2013b这样的pytz版本与此格式不匹配,因此pip的1.4+版本将所有pytz版本视为预发布版本,并且默认情况下不安装它们。
如果你只安装pytz,你可以使用--pre标志来避免这种行为,但你不应该在安装整个项目的要求时使用此标志:某些包可能具有你不想要的不稳定预发布版本。在这种情况下,使用上述描述的行为:如果你为包指定了一个“预发布”版本号,则pip将搜索“预发布”版本的该包。所以我已经将这个添加到我的requirements.txt中:
pytz>=2013b

当我升级我的软件包时,pip现在会正确地搜索并安装pytz的最新版本。
这已经在pytz bug跟踪器中的问题#1204837pip bug跟踪器中的问题#974中进行了记录。 最新消息: 如PyTz bug报告所述,pytz的版本编号现在已更改为例如2013.7 - 因此一旦您升级到此版本,问题就不应再出现。

更新的 PEP 440 看起来是说 pytz 应该使用格式 0.2013.6,而不是 2013.6。令人困惑。 - Jeremy

0
仅仅是一个学生。我在学习pytz时遇到一些问题(下载,运行,命令提示符,然后尝试使用IntelliJ,Project Structure,SDKS),即使删除并重新做文件后,它仍无法导入。查看了Launchtype的错误列表后,最终选择了pendulum。它能够与之前使用pytz的脚本正常工作。这只是一个想法而不是直接的答案。原始脚本是Buchalka(在一节Python3课程中教授Python3脚本,并且该课程无法在IntelliJ上工作)。将脚本改为pendulum(Intellij,Project Structure,SDKS,+),以便我可以体验时区。(此代码块没有缩进)由于在互联网上搜索没有发现很多有助于解决pytz问题的帮助,因此发布这篇文章。Pendulum提供了一种替代方法。
import pendulum
import datetime
country = "Europe/Paris"

tz_to_display = pendulum.timezone(country)
local_time = datetime.datetime.now(tz=tz_to_display)
print("The time in {} is {}".format(country, local_time))
print("UTC is {}".format(datetime.datetime.utcnow()))

对于那些拥有更多知识和更复杂脚本的人,这里是摆线网站。https://pendulum.eustace.io/blog/a-faster-alternative-to-pyz.html 网站上存在一个针对摆线的库,它声明(SÉBASTIEN EUSTACE)。

这是因为Pendulum在很大程度上依赖于Python 3.6中引入的fold属性的存在。

它之所以在Pendulum生态系统内部工作,是因为它在DateTime类中回溯了fold属性。


1
TMI - 你当然可以缩短你的回答并给出更精确的答案。 - colidyre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接