Почему импорт numpy ведет себя иначе? - PullRequest
2 голосов
/ 13 марта 2020

Я использовал следующие команды для установки numpy в моей виртуальной среде python3 на машине с Ubuntu 16.04 LTS.

Моя цель - использовать python 3.5 по умолчанию в моем venv и учиться numpy. Я не должен был явно использовать python3. Я чувствую, что есть некоторые совпадения / ошибки, которые могут быть более серьезной проблемой, если игнорировать их сейчас. Кроме того, в моей виртуальной среде не установлена ​​python 2.x, но она установлена ​​на системном уровне.

Команды python3 -V и python -V показывают одну и ту же версию, и обе расположены в тот же путь Почему последняя команда работает, а вторая с последней не работает?

~/proj1$ virtualenv --no-site-packages -p python3 venv
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/$USER/proj1/venv/bin/python3
Also creating executable in /home/$USER/proj1/venv/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
~/proj1$ source venv/bin/activate
(venv) ~/proj1$ which pip
/home/$USER/proj1/venv/bin/pip
(venv) ~/proj1$ pip -V
pip 20.0.2 from /home/$USER/proj1/venv/lib/python3.5/site-packages/pip (python 3.5)
(venv) ~/proj1$ pip install numpy
Collecting numpy
  Using cached numpy-1.18.1-cp35-cp35m-manylinux1_x86_64.whl (19.9 MB)
Installing collected packages: numpy
Successfully installed numpy-1.18.1
(venv) ~/proj1$ python -V
Python 3.5.2
(venv) ~/proj1$ python3 -V
Python 3.5.2
(venv) ~/proj1$ which python
/home/$USER/proj1/venv/bin/python
(venv) ~/proj1$ which python3
/home/$USER/proj1/venv/bin/python3
(venv) ~/proj1$ python -c "import numpy"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named 'numpy'
(venv) ~/proj1$ python3 -c "import numpy"
(venv) ~/proj1$ 

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Проблема не имеет ничего общего с numpy. Скорее, происходит то, что псевдоним python='/usr/bin/python3' не позволяет вашей оболочке найти исполняемый файл python, который находится первым в вашем пути выполнения (т. Е. Исполняемый файл с путем, указанным "which python"), который смешивается с вашей виртуальной средой. настроить. Из-за этого псевдонима

python -c "import numpy"

интерпретируется как

/usr/bin/python3 -c "import numpy"

Поскольку вы установили numpy в виртуальной среде, общесистемная установка Python 3 в /usr/bin по проекту не знает об этой numpy установке, так что вы получите ImportError.

Если, с другой стороны, вы должны были запустить

unalias python
python -c "import numpy"

тогда python будет принято за /home/$USER/proj1/venv/bin/python, при условии, что вы, конечно, уже /home/$USER/proj1/venv/bin/activate, конечно, и все будет работать так, как вы ожидаете.

0 голосов
/ 16 марта 2020

Мораль здесь «не используйте which». bash (который сейчас используют почти все) имеет встроенную команду type, которая показывает, как интерпретируется команда; в частности, type -a python здесь покажет вам, что будет быть python вашей виртуальной среды, но на самом деле имеет псевдоним для запуска того же самого из /usr/bin, который является тем же версия, но не установлены те же пакеты (потому что каталоги виртуальной среды не находятся на sys.path).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...