pip install / pytz 版本冲突?
Posted
技术标签:
【中文标题】pip install / pytz 版本冲突?【英文标题】:pip install / pytz versioning conflict? 【发布时间】:2015-11-28 13:06:18 【问题描述】:我在 Ubuntu 12.04 虚拟机上运行 pip install protobuf==2.6.1
作为项目 install
脚本的一部分。这会产生以下错误:
使用pip install -r requirements.txt
会产生同样的错误。
我有pip 7.1.2
,并且在其他 Ubuntu 12.04 VM 上拥有protobuf 2.6.1
,它们的安装包列表类似(不完全相同)。 Pip freeze 说pytz===2011k
。 (注意三元等于。)
pip-conflict-checker
只报告一个冲突,似乎与pytz
和protobuf
都无关:
$ pipconflictchecker
--------------------------------------------------
Conflicts Detected
--------------------------------------------------
- python-dateutil(2.1) pandas(<2)
为什么 pip 将 pytz===2011k
和 pytz>=2010
标记为冲突?
我想在一个“requirements.txt”中列出我所有的 pip 要求。有没有办法在不触发上述错误的情况下做到这一点?我对pytz
本身没有明确、直接的要求。
我还能够使用显式的pip install 2012b0
来安装protobuf
,但不能使用pip install -r requirements.txt
作为requirements.txt,同时带有protobuf==2.6.1
和pytz>=2015
。
可能相关的链接:
已弃用的 pytz 版本控制解决方法:https://bugs.launchpad.net/pytz/+bug/1224858 简单的 VersionConflict 和 pip 冲突检查器示例:https://github.com/docker/compose/issues/918 PEP 440 / Python 版本控制https://www.python.org/dev/peps/pep-0440 包括pytz 版本https://www.python.org/dev/peps/pep-0440/#olson-database-versioning 的特别说明和'===' 的描述https://www.python.org/dev/peps/pep-0440/#arbitrary-equality pip 开发线程依赖检查/解析https://github.com/pypa/pip/issues/988【问题讨论】:
【参考方案1】:我希望有人提出更好的解决方案,但这可能需要等待 pip 提供真正的解决冲突工具,而不是目前的“默默地先找到任何东西”的方法。 (请参阅https://pip.pypa.io/en/stable/user_guide.html#requirements-files)由于 pip 明显无法解析 pytz 2011k 的版本号,特定问题可能也很复杂。 (我认为这就是“===”的含义,但我在 pip 的文档中没有找到明确的确认。)
与此同时,我似乎有两个选择:
在 requirements.txt 中明确指定 pytz 的版本 重新排列 requirements.txt 中依赖项的顺序这两个选项都遇到相同的问题:除了以下之一之外,没有其他方法可以获取必要的数据([preferred version of pytz] 或 [preferred order]):
手动解析我的完整依赖树 反复试验我建议将此“答案”作为自己和他人的占位符/指南/解决方法。我不认为它是“可接受的”,因为它很脆弱:如果我想让 pytz 保持最新,我必须监控他们的发布时间表,并可能在 pytz 发布更新或我发布更新时重复上述过程添加/删除涉及 pytz 的依赖项。
观看这个帖子,希望得到真正的解决方案:https://github.com/pypa/pip/issues/988
【讨论】:
【参考方案2】:在我的 MAC EL-Capitan 上,我在使用 python 2.6 版时遇到了类似的错误,错误如下
bash# ./configure CXXFLAGS=-Wno-deprecated-declarations
bash# make
...
pkg_resources.VersionConflict: (putz 2012d (/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python), Requirement.parse('pytz>=2010'))
make[2]: *** [../3rdparty/protobuf-2.6.1/python/dist/protobuf-2.6.1-py2.6.egg] Error 1
make[1]: *** [all] Error 2
make: *** [all-recursive] Error 1
解决方案
更改了 python 版本 > 2.6 似乎是 pytz 与 2.6 的版本兼容性问题
但是 python3.4 在使用 ./configure 脚本时失败
.checking whether python3.4 version >= 2.6... configure: error: too old
所以我建议你坚持使用 python2.7bash# ./configure CXXFLAGS=-Wno-deprecated-declarations PYTHON_VERSION=2.7
bash# make
【讨论】:
以上是关于pip install / pytz 版本冲突?的主要内容,如果未能解决你的问题,请参考以下文章