Обычно я предпочитаю создавать virtualenvs с опцией -no-site-packages для большей изоляции, а также потому, что глобальные пакеты по умолчанию python включают довольно много пакетов, и обычно большинство из них не нужны. Однако я бы хотел сохранить несколько пакетов в глобальном масштабе, например PIL или psycopg2. Есть ли хороший способ включить их в virtualenv, который также может быть легко автоматизирован?Включая глобальный пакет в virtualenv, который был создан с -no-site-пакетами
ответ
Если вы используете virtualenvwrapper, и вы могли бы использовать скрипт postmkvirtualenv для автоматического создания символических ссылок в новом каталоге virtualenv sitepackages.
#!/bin/sh
cdsitepackages
ln -s /path/to/system/site-packages/package-name
cdvirtualenv
Забыл об этом вопросе, но я это сделал. –
Я на самом деле не пробовал это с этими конкретными пакетами, но я бы предположил, что простая символическая ссылка из глобальных пакетов сайтов в пакеты сайта virtualenv может работать, и это легко можно использовать для сценариев.
Если вы используете virtualenvwrapper, команда оболочки add2virtualenv
должна присутствовать в активном virtualenv. Использование:
add2virtualenv /path/to/package
, чтобы добавить запись в файл РТН _virtualenv_path_extensions.pth
в вашем virtualenv сайта-пакетах.
Преимущество использования add2virtualenv, а не создание символических ссылок, заключается в том, что вы можете удалить пакет из импортируемого, закомментировав свою строку в файле PTH. Это упрощает проверку правильности кода в отношении нескольких версий библиотеки, от которых это зависит.
Да, я согласен, что теперь это лучший способ. Я почти уверен, что он был недоступен пару лет назад. –
Возможно, он недоступен. Я, конечно, большой поклонник virtualenvwrapper за небольшие полезные вещи. Конечно, вы также можете сделать это вручную, написав собственный файл PTH. – pcurry
Связанный: [Установка некоторых пакетов с использованием virtualenv] (http://stackoverflow.com/questions/434407/) –