使用 platform.version 确定 Python 版本
Determining Python version with platform.version
我正在尝试运行一个Python包(ig-markets-api-python-library,它有股价流功能),我以前有过 运行ning,我正在失去理智试图弄清楚为什么我不能让它再次工作。这可能是一个菜鸟问题,所以感谢您的帮助。我正在 运行ning Python 3.5.1 和 Anaconda 2.4.1(64 位),我 运行 进入以下错误:
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 方法。查看来自 bunch 的 python3_compat.py 的代码,它使用 识别 Python 版本来自 plaform 的 version() 方法,但 _IS_PYTHON_3 始终为 false:
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() returns 关于我的操作系统的信息:
>>> import platform
>>> platform.version()
'#48~14.04.1-Ubuntu SMP Fri Dec 18 10:24:49 UTC 2015'
... 这与 platform 文档一致。当然我在这里遗漏了什么?这段代码可以工作吗?
看起来他们有点困惑。
>>> platform.python_version()
'2.7.10'
你应该改变:
import platform
_IS_PYTHON_3 = (platform.version() >= '3')
至:
import sys
_IS_PYTHON_3 = (sys.version >= '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
我正在尝试运行一个Python包(ig-markets-api-python-library,它有股价流功能),我以前有过 运行ning,我正在失去理智试图弄清楚为什么我不能让它再次工作。这可能是一个菜鸟问题,所以感谢您的帮助。我正在 运行ning Python 3.5.1 和 Anaconda 2.4.1(64 位),我 运行 进入以下错误:
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 方法。查看来自 bunch 的 python3_compat.py 的代码,它使用 识别 Python 版本来自 plaform 的 version() 方法,但 _IS_PYTHON_3 始终为 false:
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() returns 关于我的操作系统的信息:
>>> import platform
>>> platform.version()
'#48~14.04.1-Ubuntu SMP Fri Dec 18 10:24:49 UTC 2015'
... 这与 platform 文档一致。当然我在这里遗漏了什么?这段代码可以工作吗?
看起来他们有点困惑。
>>> platform.python_version()
'2.7.10'
你应该改变:
import platform
_IS_PYTHON_3 = (platform.version() >= '3')
至:
import sys
_IS_PYTHON_3 = (sys.version >= '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