web-dev-qa-db-ja.com

Linuxでpipを使用してすべてのユーザーにモジュールをインストールする方法は?

標準python環境ie/usr/local/lib/python2.7/dist-packagesを使用してpipを使用してパッケージをインストールする方法virtualenvを使用せずに、この新しいパッケージをすべてのユーザーが利用できるようにしますか?

以下を使用すると、パッケージはルート権限のみでインストールされます。

$ 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
23
nowox

説明したように、間違ったumaskが設定されている可能性があります here

最後の編集から、umask027に設定されていると思います。やろう

Sudo pip uninstall loremipsum
umask 022
Sudo pip install loremipsum
26
nowox

buntu 18.04で、コマンドSudo pip install stuff-nameを使用しても、私の場合、グローバルパスにモジュールをインストールするのに十分ではありません(ローカルユーザーpythonパス)。

私の場合の解決策

rootユーザーに変更し、ディレクトリをホームに変更しました。その後、pipインストールは期待どおりに機能し、グローバルパスにモジュールをインストールします。

詳細に、私はnowoxの回答に小さな変更(Sudo surootユーザー)、umask 022に関する最後のメモも参照してください。

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

注:umask 022コマンド/行はオプションの場合があります。通常、umaskはすでに022であり、これがデフォルトです。

12
Fabiano Tarlao

使用 --target pipを呼び出すときのオプション

pip install --target=/your/pyinstalldir loremipsum

ターゲットディレクトリは、ユーザーが書き込み可能な場所である必要があります。

通常のユーザー環境では、sys.path。これを実現する1つの方法は、PYTHONPATH env varを使用することです。

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