Почему sudo требуется при использовании pip для установки библиотек в virtualenv на главном узле AWS EMR? - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь использовать pip для установки библиотек в Python virtualenv, который находится на главном узле AWS EMR. По какой-то причине sudo pip работает нормально, но non-sudo pip молча завершается неудачей.

Некоторый фон:

  • Я запускаю кластер EMR с версией emr-5.19.0.
  • Я выполняю SSHing на главном узле, который использует Amazon Linux AMI 2018.03.
  • По умолчанию в этой ОС установлены Python 2.7 и 3.4.
  • Я создал новый virtualenv на основе уже установленного Python 3.4.
  • Я активировал свой новый virtualenv и убедился, что все пути указывают на мою установку venv (, а не на глобальную установку Python), например, which python, which pip все выглядит правильно.

Итак, я создаю и активирую свой virtualenv следующим образом:

cd /home/ec2-user/my_app
virtualenv --python=python3.4 venv
source venv/bin/activate

Это работает. Далее я пытаюсь установить пример библиотеки следующим образом:

pip install numpy

Вывод:

Collecting numpy
Installing collected packages: numpy
Successfully installed numpy-1.16.0

Однако, несмотря на успешное завершение вывода, import numpy выдает ошибку импорта, и numpy не отображается в pip list или pip freeze. Я даже просверлил в path/to/venv/lib/python3.4/dist-packages и убедился, что каталог numpy не создан.

К сожалению, эта работает :

sudo path/to/venv/bin/pip install numpy

Проблема в том, что я не хочу использовать sudo, потому что это противоречит лучшим практикам . Однако, кажется, что большинство людей используют sudo для этой задачи (примеры здесь и здесь ), так что, возможно, это просто требование в среде EMR?

Примечание. Эта проблема возникает только для некоторых библиотек. Например, pyspark и geocoder устанавливаются нормально, но numpy и pandas молча завершаются неудачей.

1 Ответ

0 голосов
/ 22 января 2019

В итоге я понял: pip ( иногда , но не всегда) размещал модули в определенном каталоге, который не был указан в пути Python!Похоже, это известная ошибка между Amazon Linux и pip.

Например, numpy размещался по адресу:

path/to/venv/lib/python3.4/dist-packages/numpy

Однако pyspark размещался по адресу:

path/to/venv/lib64/python3.4/dist-packages/pyspark

Последний каталог находится на пути Python, но первого нет.Вот почему import pyspark работал, а import numpy - нет.Мы можем заставить pip устанавливать библиотеки в соответствующий каталог следующим образом:

pip install numpy --target='/path/to/venv/lib/python3.4/dist-packages'

Приведенная выше команда решает мою проблему.

...