【发布时间】: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 方法。查看 bunch 中 python3_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 ofmunch. -
确实,
platform.version()返回的是操作系统版本(例如 Windows 7 的 6.1.xxxx),而不是 Python 版本。 -
还有
munchhas a working version check。 -
好像是
trading_ighas already updated,但可能还没有发布变化。 -
啊,我一直在用 PIP 抓取软件包并获取旧版本,上次我可能从 github 克隆了存储库并获取了更新版本。祝大家好运