2016-04-27 2 views
8

Как установить пакет в стандартную среду python i.e./usr/local/lib/python2.7/dist-packages с использованием pip и сделать этот новый пакет доступным для всех пользователей без использования virtualenv?Как установить модуль для всех пользователей с помощью pip на linux?

Используя следующее, пакет устанавливается только с разрешениями корня:

$ sudo pip install loremipsum 
Downloading/unpacking loremipsum 
    Downloading loremipsum-1.0.5.tar.gz 
    Running setup.py (path:/tmp/pip_build_root/loremipsum/setup.py) 
    egg_info for package loremipsum 

Installing collected packages: loremipsum 
    Running setup.py install for loremipsum 

Successfully installed loremipsum 
Cleaning up... 

Доказательство:

$ python -c 'import loremipsum' 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
ImportError: No module named loremipsum 

$ sudo python -c 'import loremipsum' 

$ pip install loremipsum 
Requirement already satisfied (use --upgrade to upgrade): loremipsum in 
/usr/local/lib/python2.7/dist-packages 
Cleaning up... 

$ cowsay sad 
_____ 
<sad> 
----- 
     \ ^__^ 
     \ (oo)\_______ 
      (__)\  )\/\ 
       ||----w | 
       ||  || 

Пожалуйста, не советуете мне использовать apt-get install python-... вместо этого. Я хотел бы знать, что такое моя ошибка и как правильно использовать пип.

$ python --version 
Python 2.7.6 
$ pip --version 
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7) 
$ uname -a 
Linux _ 3.19.0-32-generiC#37~14.04.1-Ubuntu SMP _ x86_64 GNU/Linux 

EDIT

Я думаю, проблема в том, что pip не позволяет группе и все прочитать установленный материал:

$ sudo pip uninstall loremipsum 
Uninstalling loremipsum: 
    /usr/local/lib/python2.7/dist-packages/loremipsum-1.0.5.egg-info 
    /usr/local/lib/python2.7/dist-packages/loremipsum/__init__.py 
    /usr/local/lib/python2.7/dist-packages/loremipsum/__init__.pyc 
    /usr/local/lib/python2.7/dist-packages/loremipsum/default/dictionary.txt 
    /usr/local/lib/python2.7/dist-packages/loremipsum/default/sample.txt 
    /usr/local/lib/python2.7/dist-packages/loremipsum/generator.py 
    /usr/local/lib/python2.7/dist-packages/loremipsum/generator.pyc 
Proceed (y/n)? y 
    Successfully uninstalled loremipsum 

$ sudo pip install loremipsum 
Downloading/unpacking loremipsum 
    Downloading loremipsum-1.0.5.tar.gz 
    Running setup.py (path:/tmp/pip_build_root/loremipsum/setup.py) egg_info for package loremipsum 

Installing collected packages: loremipsum 
    Running setup.py install for loremipsum 

Successfully installed loremipsum 
Cleaning up... 
$ sudo ls -al /usr/local/lib/python2.7/dist-packages/loremipsum 
total 60 
drwxr-s--- 3 root staff 4096 Apr 27 22:06 . 
drwxrwsr-x 18 root staff 4096 Apr 27 22:06 .. 
drwxr-s--- 2 root staff 4096 Apr 27 22:06 default 
-rw-r----- 1 root staff 16182 Apr 27 22:06 generator.py 
-rw-r----- 1 root staff 16323 Apr 27 22:06 generator.pyc 
-rw-r----- 1 root staff 6130 Apr 27 22:06 __init__.py 
-rw-r----- 1 root staff 6869 Apr 27 22:06 __init__.pyc 
+0

Что такое вывод 'python -version' и' pip -version'? –

+0

Да, но я не хочу отделять его от операционной системы ... – nowox

+0

@wRAR pip и virtualenv предназначены для совершенно разных задач. Это правда, что многие люди используют pip и virtualenv в сочетании, но я не думаю, что это правильно сказать, что это * правильное * использование. – wim

ответ

10

Вы можете иметь неправильный umask набор, как описано here

С вашего последнего редактирования, я думаю, вы umask установлен в 027. Попробуйте сделать

sudo pip uninstall loremipsum 
umask 022 
sudo pip install loremipsum 
+1

Для всех, кто интересуется 'umask', является командой для установки прав доступа по умолчанию для файлов/каталогов. Подробнее [здесь] (https://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html) –

1

Используйте --target параметр при вызове пип

pip install --target=/your/pyinstalldir loremipsum 

Целевой каталог должен быть местом, доступным для записи вашим пользователем.

Обратите внимание, что каждый пользователь должен правильно настроить среду, чтобы целевой каталог был видимым в пути python.

Один из способов достижения этого - добавление этого каталога в переменную пути по всей системе. Например, можно создать файл, как этот

# /etc/profile.d/myenvvars.sh 
export PYTHONPATH=/your/pyinstalldir 

 Смежные вопросы

  • Нет связанных вопросов^_^