Как заставить использование python 3 в cocotb?

Я использую 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))

Я вижу, что python2.7 используется, когда я запускаю тест с командой "make":

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

Мой исполняемый файл python3 называется... на самом деле python3 (debian). Есть ли канонический способ заставить cocotb использовать python3 вместо python2?

1 ответ

Решение

Я нашел решения на linuxconfig.org, благодаря themperek. Но это не совсем то, что я хочу.

Решение с псевдонимом не работает для меня. Альтернатива обновления работает, но только с "официальным" python3, установленным на Debian. Я не могу использовать альтернативу (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) 
[...]

Я нашел правильный способ сделать это.

Сначала загрузите последнюю версию 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

Затем вы можете запустить тестовую среду cocotb с помощью традиционной команды make:

$ make

Активируйте среду Python с помощью:

$ deactivate

Попробуйте обновить переменную 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
Другие вопросы по тегам