pip安装/pytz版本控制冲突?

pip安装/pytz版本控制冲突?,pip,protocol-buffers,versioning,pytz,Pip,Protocol Buffers,Versioning,Pytz,我在Ubuntu 12.04虚拟机上运行了pip安装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 SSLConte

我在Ubuntu 12.04虚拟机上运行了
pip安装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将
pytz===2011k
pytz>=2010
标记为冲突

我想在一个“requirements.txt”中列出我所有的pip需求。有没有办法在不触发上述错误的情况下执行此操作?我对
pytz
本身没有明确、直接的要求

我还能够使用显式的
pip install 2012b0
来安装
protobuf
,但是
pip install-r requirements.txt
不使用
protobuf==2.6.1
pytz>=2015
的requirements.txt

潜在相关链接:

  • 不推荐使用的pytz版本控制解决方案:
  • 简单版本冲突和pip冲突检查器示例:
  • PEP440/Python版本控制包括pytz版本的特别说明和“==”的描述
  • 依赖项检查/解析的pip开发线程

我希望有人能想出更好的解决方案,但这可能需要等待pip提供真正的解决冲突的工具,而不是它目前的“先发现什么就默默地接受什么”方法。(请参阅)pip显然无法解析pytz 2011k的版本号,这可能使特定问题变得更加复杂。(我想这就是“==”的意思,但我还没有在pip的文档中找到明确的确认。)

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

  • 在requirements.txt中明确指定pytz的版本
  • 重新排列requirements.txt中依赖项的顺序
这两个选项都存在相同的问题:除了以下其中一个选项外,无法获得必要的数据([pytz首选版本]或[首选订单]):

  • 手动解析我的完整依赖关系树
  • 反复试验
我建议将这个“答案”作为我自己和其他人的占位符/指南/解决方法。我不认为它是“可接受的”,因为它是脆弱的:如果我想保持Pyz最新,我必须监视它们的发布时间表,并且在任何时候,无论PyTZ发布更新,还是添加/删除依赖于Pyz的依赖项,都可能重复上述过程。
观察这个线程,希望得到一个真正的解决方案:

在我的MAC EL Capitan上,我在使用python 2.6版时遇到了类似的错误,错误如下

bash./configure cxflags=-Wno不推荐的声明
狂欢作乐
...
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]错误1
生成[1]:***[all]错误2
make:**[所有递归]错误1

解决方案

更改了python版本>2.6,因为pytz与2.6的版本兼容性问题

但是,python3.4在使用./configure脚本时失败,脚本在
。正在检查python3.4版本>=2.6。。。配置:错误:太旧

所以我建议你坚持使用python2.7
bash./configure cxflags=-Wno不推荐的声明PYTHON\u VERSION=2.7
bash#make

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