Как четко указать командам установки python, какой python использовать?

#python

Вопрос:

У меня возникли проблемы при попытке установить модули python с помощью pip, используя локальную версию python/pip, установленную в моем домашнем каталоге. Во-первых, это должно доказать, что моя переменная PATH установлена правильно:

 command -v python
    /home/myuserid/PYTHON4/bin/python
command -v python
    /home/myuserid/PYTHON4/bin/pip
 

Затем я пытаюсь установить модули python с помощью pip. Некоторые модули успешно устанавливаются. Но один по имени matlabplot создает мне проблемы. В частности, я бегу

 pip install matplotlib --target=/home/myuserid/PYTHON4/PYTHON
 

Ошибки заключаются в

 Complete output from command /usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-VwF2LG/subprocess32/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('rn', 'n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-pj2g8u-record/install-record.txt --single-version-externally-managed --compile --home=/tmp/tmplDhrIG:
....
gcc -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python2.7 -c _posixsubprocess.c -o build/temp.linux-x86_64-2.7/_posixsubprocess.o
_posixsubprocess.c:16:10: fatal error: Python.h: No such file or directory
 #include "Python.h"
 

С этим сообщением об ошибке связаны две проблемы:

  • Во-первых, он использует /usr/local/bin/python. Это неправильный python (я ранее установил там python). Откуда это берется? Это не на моем пути. Если я распечатаю всю свою среду с помощью printenv, ее нигде не будет в списке.
  • Во-вторых, команда компиляции gcc явно включает «- I/usr/include/python2.7» в командной строке. Этого не должно произойти, потому что я пытаюсь использовать локальный python, установленный в/p/home/myuserid/PYTHON4.

Я предполагаю, что причина в том, что я как-то не указываю, где установлен python. Как я могу устранить эти проблемы?

Ответ №1:

Избегайте pip install , предпочитайте python -m pip install . Таким образом, вы прямо указываете, что хотите использовать python программу, для которой вы проверили путь. И вы можете играть во множество вариаций вокруг него:

  • python3 -m pip install
  • /usr/bin/python3 -m pip install
  • python3.9 -m pip install

Что касается проблемы numpy, то это потому pip , что вы не нашли уже скомпилированный numpy для вашей платформы. Это может быть связано с тем , что вы используете старую версию или pip , чтобы вы могли сначала попробовать python -m pip install --upgrade pip , и попробуйте установить numpy снова.

Вы также можете взглянуть на https://pypi.org/simple/numpy, вы увидите список файлов, таких как:

 numpy-1.21.2-cp38-cp38-win_amd64.whl
numpy-1.21.2-cp39-cp39-macosx_11_0_arm64.whl
numpy-1.21.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
 

whl файлы предварительно скомпилированы, но для конкретных платформ и конкретных версий Python здесь 3 колеса, которые я перечислил, предназначены для numpy 2.21.2, для cpython 3.9, для Windows, macosx и многих линуксов.

Может быть, ваш конкретный набор версий Python / версии numpy / платформы не предварительно скомпилирован здесь?

Если вам действительно нужно позволить pip скомпилировать numpy, вам понадобится еще несколько зависимостей, отсутствие Python.h одной из которых означает, что вам не хватает python3-dev пакета из вашего дистрибутива.

Последний совет: вы должны использовать venv: venv создается определенной версией Python, и все установки выполняются внутри venv (так легко снимается: просто удалите каталог, если что-то пойдет не так).