【问题标题】:Could not find a version that satisfies the requirement pytz找不到满足 pytz 要求的版本
【发布时间】:2013-08-16 08:38:03
【问题描述】:

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

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

好像是最新版本的pip有问题。

有什么解决办法吗?

【问题讨论】:

  • 试试pip install --pre pytz
  • @falsetru 该评论应该在 Bold 72 上。
  • 如果您尝试安装 askbot,请先运行上述命令,如果“pip install askbot”安装 pytz 失败,似乎可以解决问题。尝试在亚马逊的 Ubuntu 12.04 AMI 上安装 askbot 时遇到问题。
  • 好消息:不再需要 --pre:版本编号方案已更改:bugs.launchpad.net/pytz/+bug/1224858

标签: python pip virtualenv pytz


【解决方案1】:

使用 pip v1.4 或更高版本安装 pytz 时会发生此错误,这是由于此行为更改所致:

Pre-release Versions

从 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]

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

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

pytz>=2013b

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

这已被归档为issue #1204837 in the pytz bug trackerissue #974 in the pip bug tracker

停止按下:如PyTz bug report 中所述,pytz 的版本号现在已更改为,例如,2013.7 - 所以一旦升级到此,问题应该不再存在发生。

【讨论】:

  • updated PEP 440 似乎说 pytz 应该使用格式 0.2013.6,而不是 2013.6。令人困惑。
【解决方案2】:

只是一个学生。我正在学习 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 网站上有一个钟摆图书馆。它说 (SÉBASTIEN EUSTACE)

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

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

【讨论】:

  • tmi - 您当然可以缩短答案并给出更精确的答案。
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 2021-12-25
  • 2018-10-13
  • 2019-07-18
  • 2020-04-15
  • 2015-11-24
  • 2018-07-21
  • 2020-06-11
相关资源
最近更新 更多