4

我正在使用 CocoTB 来测试我的 HDL 设计,但据我所知,它可以与 python2.7 或 python3 一起使用。

在 setup.py 配置文件中,我可以看到两者都受支持:

    [...]
    "Programming Language :: Python :: 2.7",
    "Programming Language :: Python :: 3",
    [...]

在 endian_swapper 测试(examples/endian_swapper/tests/test_endian_swapper.py)中,如果我修改测试脚本以查看使用的是哪个版本:

@cocotb.test()
def wavedrom_test(dut):
    """
    Generate a JSON wavedrom diagram of a trace and save it to wavedrom.json
    """
    print("Python version used {}".format(sys.version_info))

我可以看到使用 «make» 命令启动测试时使用了 python2.7:

Python version used sys.version_info(major=2, minor=7, micro=9, releaselevel='final', serial=0)

我的 python3 可执行文件名为...实际上是 python3(debian)。有没有强制 cocotb 使用 python3 而不是 python2 的规范方法?

4

3 回答 3

1

我找到了一个合适的方法来做到这一点。

首先在官网下载最新版本的python:

$ wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz

然后将其展开并使用选项--enable-shared对其进行配置

$ tar -Jxvf Python-3.7.4.tar.xz
$ cd Python-3.7.4
$ ./configure --enable-shared
$ make
$ sudo make install

安装后转到您的 cocotb 测试目录,然后安装虚拟环境:

$ export LD_LIBRARY_PATH=/usr/local/lib
$ virtualenv --python=/usr/local/bin/python3.7 envp37
$ source envp37/bin/activate
$ python -m pip install cocotb

然后你可以使用传统的 make 启动你的 cocotb 测试环境:

$ make

使用以下命令激活 python 环境:

$ deactivate
于 2019-10-08T13:27:41.160 回答
1

尝试更新 PATH 变量。为我工作。
当 cocotb 查找 python 时,它会在PATH变量中列出的文件夹中查找它。
假设您的python3完整路径位于
/usr/bin/python3
(您可以找到python3完整路径which python3
我还在这里添加了指向新位置的链接,以防python2和python3都在同一个文件夹中......

> python -V
Python 2.7.17
> ln -s /usr/bin/python3 /home/$USER/python
> export PATH="/home/$USER:$PATH"
> python -V
Python 3.6.9
于 2020-06-04T11:32:08.343 回答
0

感谢themperek ,我在linuxconfig.org上找到了解决方案。但这并不是我想要的。

别名解决方案对我不起作用。update-alternative 有效,但仅适用于在 debian 上安装的 «official» python3。我不能使用手动安装的替代(3.7)。

$ sudo update-alternatives --config python
There are 3 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /usr/bin/python3.7   2         auto mode
  1            /usr/bin/python2.7   0         manual mode
  2            /usr/bin/python3.4   1         manual mode
* 3            /usr/bin/python3.7   2         manual mode

Press enter to keep the current choice[*], or type selection number: 3
$ make clean;make
0.00ns INFO     Running on Icarus Verilog version 11.0 (devel)
0.00ns INFO     Python interpreter initialised and cocotb loaded!
0.00ns INFO     Running tests with Cocotb v1.0.1 from /opt/cocotb
0.00ns INFO     Seeding Python random module with 1554105931
0.00ns INFO     Found test test_ttl.ttl_test
0.00ns INFO     Running test 1/1: ttl_test
0.00ns INFO     Starting test: "ttl_test"
                Description:  simple ttl test function 
[...]
3.4.2 (default, Feb  7 2019, 06:11:23) 
[...]
于 2019-04-01T08:08:09.303 回答