【问题标题】:Determining Python version with platform.version使用 platform.version 确定 Python 版本
【发布时间】:2016-09-25 01:46:22
【问题描述】:

我正在尝试运行我以前运行过的 Python 包(ig-markets-api-python-library,它具有股价流功能),现在我正在想弄清楚为什么我不能让它再次工作。这可能是一个菜鸟问题,所以感谢您的帮助。我正在使用 Anaconda 2.4.1(64 位)运行 Python 3.5.1,但遇到以下错误:

Traceback (most recent call last):
  File "setupStreamer.py", line 8, in <module>
    import ig_streamer
  File "/ig-tools-python/ig_streamer.py", line 13, in <module>
    from trading_ig import (IGService, IGStreamService)
  File "/opt/conda/lib/python3.5/site-packages/trading_ig/__init__.py", line 17, in <module>
    from .rest import IGService
  File "/opt/conda/lib/python3.5/site-packages/trading_ig/rest.py", line 15, in <module>
    from .utils import (_HAS_PANDAS, _HAS_BUNCH)
  File "/opt/conda/lib/python3.5/site-packages/trading_ig/utils.py", line 21, in <module>
    from infi.bunch import bunchify
  File "/opt/conda/lib/python3.5/site-packages/infi/bunch/__init__.py", line 31, in <module>
    from .python3_compat import *
  File "/opt/conda/lib/python3.5/site-packages/infi/bunch/python3_compat.py", line 20, in <module>
    iteritems = dict.iteritems

AttributeError: type object 'dict' has no attribute 'iteritems'

所以出现错误是因为 bunch 模块试图调用 iteritems 方法,但这是 Python 2 方法。查看 bunchpython3_compat.py 的代码,它使用 plaformversion() 方法识别 Python 版本/em>,但 _IS_PYTHON_3 始终为假:

import platform

_IS_PYTHON_3 = (platform.version() >= '3')

...
# dict.iteritems(), dict.iterkeys() is also incompatible
if _IS_PYTHON_3:
    iteritems = dict.items
    iterkeys  = dict.keys
else:
    iteritems = dict.iteritems
    iterkeys = dict.iterkeys

在我的机器上,platform.version() 返回有关我的操作系统的信息:

 >>> import platform
 >>> platform.version()
 '#48~14.04.1-Ubuntu SMP Fri Dec 18 10:24:49 UTC 2015'

... 这与 platform 文档一致。我肯定在这里遗漏了一些东西吗?这段代码可以工作吗?

【问题讨论】:

  • 它也不适用于 OS X,我认为作者正在寻找 sys.version,或者可能是 platform.python_version。注意包appears to be deprecated in favour of munch.
  • 确实,platform.version() 返回的是操作系统版本(例如 Windows 7 的 6.1.xxxx),而不是 Python 版本。
  • 好像是trading_ig has already updated,但可能还没有发布变化。
  • 啊,我一直在用 PIP 抓取软件包并获取旧版本,上次我可能从 github 克隆了存储库并获取了更新版本。祝大家好运

标签: python bunch


【解决方案1】:

看起来他们有点糊涂了。

>>> platform.python_version()
'2.7.10'

【讨论】:

  • 他们显然没有意识到您必须运行测试,而不仅仅是定义tox.ini...
【解决方案2】:

你应该改变:

import platform

_IS_PYTHON_3 = (platform.version() >= '3')

到:

import sys

_IS_PYTHON_3 = (sys.version >= '3')

【讨论】:

    【解决方案3】:

    确认:在 Ubuntu 下,pip install trading_ig 确实安装了旧版本。 在 Mac 下不会发生。

    所以安装模块的正确方法是:

    (仅当您已经使用 pip 安装了模块)

    $ pip uninstall trading_ig
    

    (然后)

    $ git clone https://github.com/ig-python/ig-markets-api-python-library
    $ cd ig-markets-rest-api-python-library
    $ python setup.py install
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 2022-08-14
      • 2015-07-06
      相关资源
      最近更新 更多