Python не «видит» пакет - PullRequest
       11

Python не «видит» пакет

4 голосов
/ 09 октября 2011

Я следовал этому руководству, чтобы установить python2.7 на моем CentOS 5.5: http://villaroad.com/2010/10/rolling-python-2-6-2-on-centos-5-3/

После установки Python 2.7 у меня есть:

/opt/python2.7$ ls -la
total 24
drwxr-xr-x 6 root root 4096 2011-10-01 22:32 .
drwxr-xr-x 4 root root 4096 2011-10-01 22:32 ..
drwxr-xr-x 2 root root 4096 2011-10-09 19:51 bin
drwxr-xr-x 3 root root 4096 2011-10-01 22:32 include
drwxr-xr-x 4 root root 4096 2011-10-01 23:34 lib
drwxr-xr-x 3 root root 4096 2011-10-01 22:32 share

/opt/python2.7$ ls -la bin
total 88
drwxr-xr-x 2 root root  4096 2011-10-09 19:51 .
drwxr-xr-x 6 root root  4096 2011-10-01 22:32 ..
-rwxr-xr-x 1 root root   105 2011-10-01 22:32 2to3
-rwxr-xr-x 1 root root   296 2011-10-09 19:49 easy_install
-rwxr-xr-x 1 root root   304 2011-10-09 19:49 easy_install-2.7
-rwxr-xr-x 1 root root   103 2011-10-01 22:32 idle
-rwxr-xr-x 1 root root   254 2011-10-03 01:37 pip
-rwxr-xr-x 1 root root   262 2011-10-03 01:37 pip-2.7
-rwxr-xr-x 1 root root    88 2011-10-01 22:32 pydoc
-rwxr-xr-x 2 root root 11783 2011-10-01 23:34 python
-rwxr-xr-x 2 root root 11783 2011-10-01 23:34 python2.7
-rwxr-xr-x 1 root root  1628 2011-10-01 23:34 python2.7-config
lrwxrwxrwx 1 root root    16 2011-10-01 23:34 python-config -> python2.7-config
-rwxr-xr-x 1 root root 18551 2011-10-01 22:32 smtpd.py
-rwxr-xr-x 1 root root   289 2011-10-09 19:51 virtualenv

Я использую /opt/python2.7/bin/virtualenv двоичный файл для создания среды в /var/www/myproj/env

cd /var/www/myproj 
virtualenv --no-site-packages -p /opt/python2.7/bin/python \ 
     --clear --prompt="(myproj.com) " env

Активируйте его и выполните установку колбы в пипсах. pip устанавливает колбу на env/lib/python2.7/site-packages, а ее нет на sys.path

$ python
Python 2.7.2 (default, Oct  1 2011, 23:29:08)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import flask
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named flask
>>> import sys
>>> sys.path
['', '/opt/python2.7/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg', 
'/opt/python2.7/lib/python2.7/site-packages/pip-1.0.2-py2.7.egg', 
'/opt/python2.7/lib/python27.zip', '/opt/python2.7/lib/python2.7', 
'/opt/python2.7/lib/python2.7/plat-linux2', '/opt/python2.7/lib/python2.7/lib-tk', 
'/opt/python2.7/lib/python2.7/lib-old', '/opt/python2.7/lib/python2.7/lib-dynload', 
'/opt/python2.7/lib/python2.7/site-packages']

Я пробовал то же самое, но использовал easy_install вместо pip - тот же результат.

Flask устанавливается под env/lib/python2.7/site-packages, поэтому главный вопрос: не нужно ли virtualenv добавлять env/lib/python2.7/site-packages к пути sys в python? Если нет, то что мне делать лучше:

  • добавить соответствующий каталог site-packages по пути Python во время выполнения (например, sys.path.insert(0, <path to site-packages>) в моем приложении для фляги,
  • изменить системные PYTHONPATH или
  • вызывает метод after_install virtualenv для добавления <path to site-packages> к пути питона

дополнительная информация: Я добавил к пользователю и root'у ~ / .bash_profile (~ / .profile в Ubuntu)

alias python='/opt/python2.7/bin/python'
alias python2.7='/opt/python2.7/bin/python'
PATH=$PATH:/opt/python2.7/bin

сделал source ~/.profile какой питон производит /usr/bin/python, что составляет 2,6,4 (хмммм ...)

Python 2.6.4 (r264:75706, Dec  7 2009, 18:43:55)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

Довольно странно, но если я запускаю python, я получаю правильную версию:

$ python
Python 2.7.2 (default, Oct  1 2011, 23:29:08)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.

Что еще более странно, так это то, что после следования руководству по установке python2.7 я получал команду /opt/python2.7/bin/python для which python. Во всяком случае, вопрос там, любая помощь приветствуется. Пожалуйста, примите во внимание, что я новичок в Python - возможно, это глупый вопрос, который я задаю здесь.

1 Ответ

4 голосов
/ 09 октября 2011

Всякий раз, когда вы запускаете команду с помощью Bash, она кэширует местоположение команды. Это может быть то, что вы сталкиваетесь здесь. Используйте hash -r для очистки кэша.

Обратите внимание, что в вашей системе сейчас три питона: 2,6 в / usr / bin системы, 2,7 в /opt/python2.7/bin/ и 2,7 в Virtualenv в env / bin. Только последний установлен колбу. Удостоверьтесь, что вы звоните.

Кроме того, не связывайтесь с .bash_profile. Особенно root .bash_profile - вам не нужны права root для фляги, не так ли? Придерживайтесь virtualenv, он намного чище и вероятность того, что вы испортите свою систему, намного ниже. (Тем не менее, $ PATH сканируется на первое совпадение, поэтому вместо PATH=$PATH:/opt/python2.7/bin вы хотите export PATH=/opt/python2.7/bin:$PATH. Но в следующий раз вам нужно изменить $ PATH, а не сейчас.)

...