Установка локальных пакетов с помощью Python virtualenv --system-site-packages - PullRequest
1 голос
/ 09 апреля 2019

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

Я на более старой платформе RHEL 6 с Python 3.4. Я разрабатываю приложение, которое будет работать на этой платформе, использующей Qt. Я установил все соответствующие библиотеки через yum (например, qt-devel, pyqt4-devel и т. Д.) И теперь хочу установить свой пакет приложения как «редактируемый» пакет, используя pip install -e mypkg. У меня также есть пара требований зависимости, которые не на yum и должны быть установлены через pip.

То, что я хотел бы сделать, - это создать virtualenv, который «наследует» системные пакеты, установленные через yum, но позволяет мне pip install моих собственных пакетов в каталог virtualenv в моем домашнем каталоге.

По моему гуглингу, лучший способ сделать это - создать виртуальную среду с системным каталогом пакетов сайта:

$ python3 -m venv --system-site-packages ~/venv

Однако, когда я пытаюсь установить пакет в каталог site-packages этого virtualenv, он пытается установить его в /usr/lib, и я получаю ошибку Permission denied.

Похоже, что опция --system-site-packages заставляет мой virtualenv полностью использовать каталог site-packages из моей системы вместо использования его в качестве «базы», ​​где другие пакеты могут быть размещены сверху.

В этом ответе говорится, что использование pip install -I должно делать то, что я хочу, но это не так:

(venv) $ pip3 install -I bitstring
...
error: could not create '/usr/lib/python3.4/site-packages/bitstring.py': Permission denied

1 Ответ

1 голос
/ 09 апреля 2019

Создание виртуальной среды без переключателя --system-site-packages.После создания среды перейдите в папку, в которой была создана среда. В ней должен быть файл pyvenv.cfg.Отредактируйте этот файл.Он имеет (среди прочего) строку

include-system-site-packages = false

Измените эту строку на:

include-system-site-packages = true

Активируйте среду.Установки модуля теперь будут выполняться в виртуальной среде, и пакеты системного сайта также будут видны.

...