导入 IbPy2 和 backtrader 的正确方法是什么?

问题描述 投票:0回答:2

您好,我在导入 backtrader 和 IbPy2 时遇到问题。当我 pip 安装两者并在 python shell 中运行 import backtrader 时,我收到以下错误:

我 pip 安装了这些:

pip 安装https://github.com/blampe/IbPy/archive/master.zip

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

我的机器的规格是:

  • MacBook Air m1
  • jupyterlabs
  • 水蟒

我认为我几乎将问题范围缩小到了 IbPy2 的错误。每当我导入未安装 IbPy2 的 backtrader 时,它都可以正常工作。但是一旦使用上面的 pip 命令安装了 IbPy2,我就会遇到这个错误。

感谢任何帮助,这会让我的一周陷入困境好几天!预先感谢您!

trading backtrader
2个回答
1
投票

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语法错误了。


0
投票

您可以下载源代码并运行

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
© www.soinside.com 2019 - 2024. All rights reserved.