58

我在 virtualenv 中安装pytz时遇到问题。

下载/解压 pytz
找不到满足 pytz 要求的版本(从版本:2009r、2008b、2009f、2008c、2007g、2011g、2005m、2011e、2007f、2011k、2007k、2006j、2008h、2008i、2011e、2008a、2011e、2 2011j,2010l,2005m,2008i,2005k,2008g,2008g,2007c,2007i,2009l,2009r,2006r,2006j,2011k,2007d,2006p,2009i,2009i,2009u,2007i,2009f,2010g,2010g,2010g,2008h,2008h,2009a,2009a,2007g,2007g,2011e,2012eb,2012b,2012b,2012b,2012b,2012b,2012b,2012b,2012b,2012b,,, 2010K,2005R,2007F,2009L,2009P,2008C,2008C,2009J,2008G,2010G,2010H,2010H,2011H,2010K,2007C,2007D,2011D,2011D,2009L,2011C,2008A,2008A,2005M,2007K,2007K,2009N,2009N,2009N,2010年,2010年,2010年,,2013B,2013B,,,,,地,,地,,地2010e,2012c,2012d,2012f,2012f,2011n,2011b,2011j,2008c,2012j,2007k,2009f,2009f,2009d,2010e,2010b,2010b,2013b,2011d,2011d,2009p,2008h,2005r,2009i,2009i,2009n,2009n,2009n,2009a,2010a 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,2009g,2005r,2011c,2012g,2009g,2009g,2012d,2009j,2010年,2010年,2007C,2010g,2007c,2009d,2009d,2009d,2010h,2010h,2005k,2005k,2006j,2006j,2006j,2006j,2006j,2006j,2006j,2006j,2006j,2006j,2006j,2006j,2010b 2009n,2011g,2011c,2012b,2009e,2009d,2011j,2007i,2012j,2012l,2010l,2009r,2012h,2012h,2009p,2008i,2012f,2012f,2009e,2012b,2012b,2012b,2005k,2008b,2008b,2013b,2013b,2013b,2013b,2012n,2012n,2012j,2012j,2004b)
清理...
没有与 pytz 版本匹配的发行版

似乎是最新版本的 pip 有问题。

有什么解决方法吗?

4

2 回答 2

78

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

预发布版本

从 v1.4 开始,pip 默认只安装PEP426指定的稳定版本。如果某个版本无法解析为兼容的PEP426版本,则假定它是预发布版本。

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

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

包的版本标识符pytz的格式类似于2013b. PEP426使用PEP440中描述的版本标识符,它指定:

公共版本标识符必须符合以下方案:

N[.N]+[{a|b|c|rc}N][.postN][.devN]

因为pytzlike 的版本2013b不匹配这种格式,所以 pip 的 1.4+版本将所有版本pytz视为预发布版本,并且默认不安装它们。

如果您只是正在安装pytz,您可以使用该--pre标志来避免这种行为,但您不希望使用此标志来安装整个项目的要求:某些软件包可能具有您不想要的不稳定的预发布版本。在这种情况下,请使用上述行为:如果您为包指定“预发布”版本号,则 pip 将搜索包的“预发布”版本。所以我把这个添加到我的requirements.txt

pytz>=2013b

当我升级我的包时,pip 现在将正确搜索并安装最新版本的pytz.

这已在 pytz 错误跟踪器中作为问题 #1204837pip 错误跟踪器中的问题 #974提交。

Stop Press:如PyTz 错误报告中所述,pytz的版本编号现在已更改为,例如,2013.7 - 所以一旦升级到此,问题应该不再出现。

于 2013-08-19T17:03:30.873 回答
0

只是一个学生。我正在学习 pytz(下载、运行、命令提示符,然后尝试了 IntelliJ、项目结构、SDKS),即使在删除、重做文件后它也不会导入。阅读 Launchtype 错误列表。我切换到钟摆。它适用于使用 pytz 的先前脚本。只是一个想法,不是直接的答案。原始脚本是带有 pytz 的 Buchalka(在课程中教授 Python3 脚本并且课程不适用于 IntelliJ)。将脚本改编为钟摆(Intellij,项目结构,SDKS,+),以便我可以体验时区。(此代码块没有缩进)发布,因为搜索 Internet 站点并没有发现对解决 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 网站上有一个摆锤库。它说(塞巴斯蒂安尤斯塔斯)

这是因为 Pendulum 严重依赖 Python 3.6 中引入的 fold 属性。

它在 Pendulum 生态系统中工作的原因是它向后移植了 DateTime 类中的 fold 属性。

于 2018-09-27T23:08:17.800 回答