Как добавить пакет Python из dist-packages в virtualenv в Debian?

Как добавить пакет Python из dist-packages в virtualenv в Debian?

Если у меня есть некоторый пакет Python в /usr/share/pyshared/или /usr/lib/pythonX.Y/dist-packages/(например, возьмем python-numpyили python-scipy), как мне добавить этот пакет в virtualenv?

При добавлении пакета в virtualenv требуется ли использовать «обычный» метод установки Python ( setpy.pyи т. п.) или использовать свой собственный?

По сути, я хочу иметь возможность легко добавлять пакеты Python, имеющие сложные расширения C ( numpy, scipy, pyQt/pyside, pygtkи т. д.), в virtualenv.

решение1

Как вы и указали, зачастую лучшим вариантом является изготовление колеса, особенно если вы регулярно его переустанавливаете.

Для привязок python gtk это не сработало для меня, и мне нужен был какой-то способ протестировать код с помощью tox(который собирает virtualenv для вас с помощью --no-site-packages). Для целей тестирования было бы достаточно (для меня) связать соответствующие установленные в системе версии, но не все из site-packages/ dist-packages.

Для этого я создал устанавливаемый пакет (ruamel.venvgtk), который устанавливает правильные ссылки для Python2.7 и Python3.4 в системах на базе Debian (Ubuntu, Linux Mint). Это происходит во время установки программы, поэтому нет необходимости менять программу. Раздел tox.iniфайла depsвыглядит так:

deps =
    pytest
    ruamel.venvgtk

и для любого созданного virtualenv pipбудут установлены ruamel.venvgtkи созданы соответствующие ссылки.

решение2

Да, когда ваше virtualenv активно, вам необходимо установить требуемый пакет с помощью distutils, «нормального» метода установки Python ( python setup.py install), или с помощью инструмента, поддерживающего virtualenv (например pip install package).

Версия пакета, которую вы устанавливаете, будет активной версией пакета для virtualenv. Неважно, создаете ли вы virtualenv с помощью virtualenv MY_ENVили virtualenv --no-site-packages MY_ENV. В первом случае все пакеты, установленные в вашей системе Python, будут доступны в virtualenv, но любой пакет, который вы устанавливаете в virtualenv, будет маскировать версию в вашей системе Python, пока virtualenv активен. Во втором случае у вас будет изолированная среда Python в virtualenv, в которой будут доступны только стандартные библиотечные пакеты и все, что вы там устанавливаете.

Имейте в виду, что такие пакеты, как Numpy и Scipy, не предоставляют готовых двоичных файлов для Linux, поэтому вам нужно будет уметь собирать их самостоятельно, если вы не хотите использовать версии, доступные через менеджер пакетов.

решение3

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

Для пакетов, исходный метод установки которых учитывает virtualenv (numpy/scipy, pyside), используйте wheels, чтобы избежать необходимости пересборки в каждом venv.

Для пакетов, которые этого не делают (GTK), это зависит от того, как они подключаются к Python.

Связанный контент