Virtualenv использует системные пакеты, когда это не должно - PullRequest
2 голосов
/ 09 сентября 2010

Я создал среду virtualenv с опцией --no-site-packages. После активации virtualenv я заметил, что импорт psycopg2 в приглашении «python» импортирует устаревшую системную библиотеку, но импорт из приглашения python2.6 импортирует более новую версию библиотеки, которую я установил в virtualenv ,

Почему это? Как я могу работать только с пакетами virtualenv, если у меня активирован virtualenv?

Я на OS X, если это имеет значение.

Изменить в ответ на комментарии Джеффа ниже:

В моем каталоге virtualenv / bin находятся исполняемые файлы "python" и "python2.6". "python2.6" является символической ссылкой на "python", а "python" является двоичным.

(ice_development)[jacob@Beagle:~] $ ls -l Virtualenv/ice_development/bin/
total 264
-rw-r--r--  1 jacob  staff   2086 Sep  8 18:13 activate

 .....

-rwxr-xr-x  1 jacob  staff  50720 Sep  8 18:13 python
lrwxr-xr-x  1 jacob  staff      6 Sep  8 18:13 python2.6 -> python

При активированном ENV оба слова "какой python" и "какой python2.6" указывают на каталог ENV.

(ice_development)[jacob@Beagle:~] $ which python
/Users/jacob/Virtualenv/ice_development/bin/python
(ice_development)[jacob@Beagle:~] $ which python2.6
/Users/jacob/Virtualenv/ice_development/bin/python2.6
(ice_development)[jacob@Beagle:~] $ 

Кроме того, подсказка идентична после использования исполняемых файлов в командной строке.

(ice_development)[jacob@Beagle:~] $ python2.6
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> psycopg2.__version__
'2.2.2 (dt dec ext pq3)'
>>> quit()

(ice_development)[jacob@Beagle:~] $ python
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> psycopg2.__version__
'2.0.13 (dt dec ext pq3)'
>>> quit()

Каталог ~ / ENV / lib / python2.6 / site-packages содержит НОВУЮ версию psycopg2 (2.2.2):

(ice_development)[jacob@Beagle:~] $ ls Virtualenv/ice_development/lib/python2.6/site-   packages/
Twisted-10.1.0-py2.6-macosx-10.6-universal.egg       setuptools-0.6c11-py2.6.egg
easy-install.pth                                     setuptools.pth
pip-0.7.2-py2.6.egg                                  txpostgres-0.3.0-py2.6.egg
psycopg2                                             zope.interface-3.6.1-py2.6-macosx-    10.6-universal.egg
psycopg2-2.2.2-py2.6.egg-info

Однако при импорте psycopg2 по разным приглашениям импортируются две разные версии.

Ответы [ 2 ]

1 голос
/ 10 сентября 2010

Благодаря ответу xnine у ​​меня появилась идея проверить файл .bashrc. Я закомментировал эти строки:

export PATH=/usr/bin/python2.6:$PATH
alias python="/usr/bin/python2.6"
alias pdb='python -m pdb'

и один из них сделал свое дело.

1 голос
/ 09 сентября 2010

Я пытался повторить вашу проблему, но безуспешно.

Активация virtualenv оставляет мне приглашение, похожее на это:

jeff@DeepThought:~$ source ~/ENV/bin/activate
(ENV)jeff@DeepThought:~$ 

Главным образом это добавляет ~ / ENV / bin в начало пути поиска, поэтому, когда я набираю «python», сначала устанавливается версия, которую я установил в этой корзине. В моем случае у меня установлено 2,6 глобально, а виртуально 2,7.

(ENV)jeff@DeepThought:~$ python
Python 2.7 (r27:82500, Sep  8 2010, 20:09:26) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

В вашем случае я нахожу странным то, что вы говорите, что у вас есть обновленные библиотеки в виртуальной среде, но вы можете получить к ним доступ только через python2.6. Если вы не создали его самостоятельно, в ~ / ENV / bin даже не должно быть исполняемого файла python2.6. Если вы активировали virtualenv, то при вводе python вы попадете в оболочку python virtualenv, а при вводе python2.6 вы попадете в глобальную оболочку python. Если бы это было так, вы должны увидеть противоположное тому, что, по вашему мнению, происходит.

Первое, что я хотел бы сделать, это проверить, что выполняется при запуске python и python2.6:

(ENV)jeff@DeepThought:~$ which python
/home/jeff/ENV/bin/python
(ENV)jeff@DeepThought:~$ which python2.6
/usr/bin/python2.6

Это выглядит так, как я и ожидал. Как выглядит твой? Если ваш файл также выглядит так, возможно, вам нужно просто зайти в ~ / ENV / lib / python2.6 / site-packages / и удалить файлы, которые доставляют вам проблемы, заменив их обновленными файлами.

РЕДАКТИРОВАТЬ: псевдоним имеет приоритет над путем поиска:

jeff@DeepThought:~$ echo $PATH
/home/jeff/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
jeff@DeepThought:~$ cat > /home/jeff/bin/hello.sh
#!/bin/bash
echo "hello world"
jeff@DeepThought:~$ chmod +x ~/bin/hello.sh 
jeff@DeepThought:~$ hello.sh
hello world
jeff@DeepThought:~$ which hello.sh
/home/jeff/bin/hello.sh
jeff@DeepThought:~$ alias hello.sh=/usr/bin/python
jeff@DeepThought:~$ which hello.sh
/home/jeff/bin/hello.sh
jeff@DeepThought:~$ hello.sh
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...