virtualenv не использует собственные пакеты - PullRequest
4 голосов
/ 11 июня 2011

Я начинаю использовать virtualenv и virtualenvwrapper в моих проектах.

После активации virtualenv с помощью команды workon я установил следующие пакеты с помощью pip install -U <package>:

$ lssitepackages 
django               pip
Django-1.3-py2.7.egg-info    pip-1.0.1-py2.7.egg-info
easy-install.pth         setuptools-0.6c11-py2.7.egg
fabric               setuptools.pth
Fabric-1.0.1-py2.7.egg-info  south
geopy                South-0.7.3-py2.7.egg-info
geopy-0.94.1-py2.7.egg-info

Проблема здесь (запуск команд с активированным virtualenv):

$ whereis python
python: /usr/bin/python2.6 /usr/bin/python /usr/bin/python2.7 /etc/python2.6 /etc/python /etc/python2.7 /usr/lib/python2.6 /usr/lib/python2.7 /usr/lib64/python2.6 /usr/lib64/python2.7 /usr/local/lib/python2.6 /usr/local/lib/python2.7 /usr/include/python2.6 /usr/include/python2.7 /usr/share/python /usr/share/man/man1/python.1.gz

$ whereis django-admin
django-admin: /usr/bin/django-admin /usr/local/bin/django-admin.py /usr/share/man/man1/django-admin.1.gz

$ whereis fab
fab: /usr/local/bin/fab

Мой virtualenv он не использует локальные пакеты!

Как мне заставить virtualenv использовать локальный Python и локальную версию пакетов вместо пакетов моей машины?


Обновление - возможное решение

Я создал новый virtualenv с mkvirtualenv --no-site-packages <name>, и теперь я получил следующие результаты:

$ which python
/home/user/.virtualenvs/VIRTUALENVNAME/bin/python

$ which django-admin
/usr/bin/django-admin

$ which django-admin.py 
/home/user/.virtualenvs/VIRTUALENVNAME/bin/django-admin.py

$ which fab
/home/user/.virtualenvs/VIRTUALENVNAME/bin/fab

Звучит так, будто теперь это работает ... за исключением команды "django-admin".

Ответы [ 2 ]

7 голосов
/ 11 июня 2011

попробуйте установить virtualenv, используя:

mkvirtualenv --no-site-packages

, чтобы создать virtualenv без каких-либо внешних библиотек python

1 голос
/ 23 августа 2012

Вы используете две разные команды, чтобы определить, какая версия Python используется.Первый раз вы использовали «whereis», а второй раз вы использовали «which».«whereis» - это не команда, которую вы хотите использовать, чтобы определить, какая версия будет работать в вашей среде.

На страницах руководства «whereis»:

whereis находитсяИсходные / двоичные файлы и руководства для указанных файлов.Предоставленные имена сначала удаляются из начальных компонентов имени пути и любого (одного) конечного расширения формы .ext, например, .c.Префиксы с.В результате использования управления исходным кодом также рассматриваются.Затем whereis пытается найти нужную программу в списке стандартных мест Linux.

Эта последняя строка здесь важна.whereis «пытается найти нужную программу в списке стандартных мест Linux».Когда вы используете virtualenv, эта версия Python не находится в стандартном месте Linux.

Вместо этого используйте «который», как вы делали во второй раз.Выдержка из справочных страниц "which":

, которая возвращает пути к файлам (или ссылкам), которые будут выполняться в текущей среде,

Это та, которую вы хотите использовать, чтобы определить, какая версия Python будет работать в вашем virtualenv.

...