Как установить модуль для всех пользователей с помощью pip на linux?

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

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

$ 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

РЕДАКТИРОВАТЬ

Я думаю, проблема в том, что 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

Ответы

Ответ 1

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

Начиная с вашего последнего редактирования, я думаю, что у umask установлено значение 027. Стараться сделать

sudo pip uninstall loremipsum
umask 022
sudo pip install loremipsum

Ответ 2

В Ubuntu 18.04 использование команды sudo pip install stuff-name недостаточно, в моем случае, для установки модулей по глобальному пути (он продолжает искать путь Python для локального пользователя).

Решение в моем случае

Я изменился на пользователя root и изменил каталог на его домашнюю страницу. Затем установка pip работала как ожидалось и установила модули в глобальный путь.

Подробно я следовал за ответом nowox с небольшим изменением (sudo su, изменения для пользователя root), также смотрите заключительное примечание о umask 022:

sudo su
cd ~
umask 022
pip install what-you-like

Примечание: команда/строка umask 022 может быть необязательной... обычно umask уже равен 022, то есть по умолчанию.

Ответ 3

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

pip install --target=/your/pyinstalldir loremipsum

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

Обратите внимание, что для этого требуется, чтобы обычная пользовательская среда имела целевой каталог в sys.path. Один из возможных способов добиться этого - использовать PYTHONPATH env var:

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