您好,我在导入 backtrader 和 IbPy2 时遇到问题。当我 pip 安装两者并在 python shell 中运行 import backtrader 时,我收到以下错误:
我 pip 安装了这些:
pip 安装 backtrader
我遇到的错误:
Traceback (most recent call last):
File ~/opt/anaconda3/lib/python3.9/site-packages/IPython/core/interactiveshell.py:3369 in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
Input In [3] in <cell line: 1>
import backtrader as bt
File ~/opt/anaconda3/lib/python3.9/site-packages/backtrader/__init__.py:62 in <module>
from .cerebro import *
File ~/opt/anaconda3/lib/python3.9/site-packages/backtrader/cerebro.py:35 in <module>
from .brokers import BackBroker
File ~/opt/anaconda3/lib/python3.9/site-packages/backtrader/brokers/__init__.py:30 in <module>
from .ibbroker import IBBroker
File ~/opt/anaconda3/lib/python3.9/site-packages/backtrader/brokers/ibbroker.py:30 in <module>
import ib.ext.Order
File ~/opt/anaconda3/lib/python3.9/site-packages/ib/ext/Order.py:9 in <module>
from ib.lib import Double, Integer
File ~/opt/anaconda3/lib/python3.9/site-packages/ib/lib/__init__.py:239
except (socket.error, ), ex:
^
SyntaxError: invalid syntax
我的机器的规格是:
我认为我几乎将问题范围缩小到了 IbPy2 的错误。每当我导入未安装 IbPy2 的 backtrader 时,它都可以正常工作。但是一旦使用上面的 pip 命令安装了 IbPy2,我就会遇到这个错误。
感谢任何帮助,这会让我的一周陷入困境好几天!预先感谢您!
pip install wheel
说明:
错误是什么:这是一个python2语法错误,因为它运行在不同版本的python上。请阅读此答案了解详细信息。 Python 2 和 Python 3。
为什么会出现:因为没有安装
wheel
,尤其是用pipenv
创建虚拟环境时。 Pipenv 或 pip 安装 IbPy2
而没有 wheel
,消息是这样的: Using legacy 'setup.py install' for IbPy2, since package 'wheel' is not installed.
然后就被识别为 Python2 编写的代码。
解决方法:先用
wheel
安装pip install wheel
。然后用IbPy2
安装pip install IbPy2
,即可正确安装并识别为Python3代码。这样你就不会再看到Python2语法错误了。
您可以下载源代码并运行
setup.py build
,然后运行setup.py install
。从setup.py
的源码中可以看到如下;理想情况下,它将转换
try: # Python 3
print("python 3...")
from distutils.command.build_py import build_py_2to3 as build_py
except ImportError: # Python 2
print("python2...")
from distutils.command.build_py import build_py