pip install / pytz版本冲突?

时间:2015-09-02 21:02:47

标签: pip protocol-buffers versioning pytz

我在Ubuntu 12.04 VM上运行pip install protobuf==2.6.1作为项目的install脚本的一部分。这会产生以下错误:

Collecting protobuf==2.6.1
/usr/local/lib/python2.7/dist-packages/pip-7.1.2-py2.7.egg/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Downloading protobuf-2.6.1.tar.gz (188kB)
    100% |################################| 188kB 2.5MB/s 
    Complete output from command python setup.py egg_info:

    Installed /tmp/pip-build-AnwMIr/protobuf/.eggs/google_apputils-0.4.2-py2.7.egg
    Traceback (most recent call last):
      File "", line 20, in 
      File "/tmp/pip-build-AnwMIr/protobuf/setup.py", line 200, in 
        "Protocol Buffers are Google's data interchange format.",
      File "/usr/lib/python2.7/distutils/core.py", line 112, in setup
        _setup_distribution = dist = klass(attrs)
      File "/usr/local/lib/python2.7/dist-packages/setuptools/dist.py", line 268, in __init__
        self.fetch_build_eggs(attrs['setup_requires'])
      File "/usr/local/lib/python2.7/dist-packages/setuptools/dist.py", line 313, in fetch_build_eggs
        replace_conflicting=True,
      File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 836, in resolve
        dist = best[req.key] = env.best_match(req, ws, installer)
      File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1074, in best_match
        dist = working_set.find(req)
      File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 711, in find
        raise VersionConflict(dist, req)
    pkg_resources.VersionConflict: (pytz 2011k (/usr/lib/python2.7/dist-packages), Requirement.parse('pytz>=2010'))

使用pip install -r requirements.txt会产生相同的错误。

我有pip 7.1.2,并且在其他Ubuntu 12.04虚拟机上拥有protobuf 2.6.1,其中包含类似(不相同)的已安装软件包列表。 Pip冻结说pytz===2011k。 (注意 triple 等于。)

pip-conflict-checker仅报告一次与pytzprotobuf无关的冲突:

$ pipconflictchecker
--------------------------------------------------
 Conflicts Detected
--------------------------------------------------
 - python-dateutil(2.1) pandas(<2)

为什么pip标记pytz===2011kpytz>=2010处于冲突状态?

我想在单个&#34; requirements.txt&#34;中列出我的所有点数要求。有没有办法在不触发上述错误的情况下执行此操作?我对pytz本身没有明确,直接的要求。

我还可以使用protobuf安装pip install 2012b0,但使用pip install -r requirements.txt使用protobuf==2.6.1来安装pytz>=2015 var rectangleInstance = new Cesium.GeometryInstance({ geometry : new Cesium.RectangleGeometry({ rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0) }), id : 'rectangle', attributes : { color : new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5) } }); scene.primitives.add(new Cesium.GroundPrimitive({ geometryInstance : rectangleInstance })); }和HAVING

潜在相关链接:

2 个答案:

答案 0 :(得分:0)

我希望有人提出一个更好的解决方案,但这可能需要等待pip提供解决冲突的真正工具,而不是当前“默默地采取它先发现的任何方法”的方法。 (参见https://pip.pypa.io/en/stable/user_guide.html#requirements-files)由于pip明显无法解析pytz 2011k的版本号,因此特定问题可能也很复杂。 (我认为这是“===”的含义,但我没有在pip的文档中找到明确的确认。)

与此同时,我似乎有两种选择:

  • 在requirements.txt
  • 中明确指定pytz的版本
  • 重新排列requirements.txt
  • 中依赖项的顺序

这两个选项都遇到同样的问题:除了其中一个之外,没有办法获得必要的数据([pytz的首选版本]或[首选订单]):

  • 手动解析我的完整依赖关系树
  • 试错误

我建议将这个“答案”作为我自己的占位符/指南/解决方案。其他。我不认为它是“可接受的”,因为它很脆弱:如果我想让pytz保持最新状态,我必须监控他们的发布时间表,并且可能随时重复上述过程pytz发布更新或我添加/删除涉及pytz的依赖项。

观看此主题以期获得真正的解决方案:https://github.com/pypa/pip/issues/988

答案 1 :(得分:0)

在我的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版本&gt; 2.6因为它似乎是pytz与2.6的版本兼容性问题

然而,使用./configure脚本停止时python3.4失败 .checking whether python3.4 version >= 2.6... configure: error: too old

所以我建议你坚持使用python2.7
bash# ./configure CXXFLAGS=-Wno-deprecated-declarations PYTHON_VERSION=2.7 bash# make

相关问题