如何在 linux 上为所有使用 pip 的用户安装模块?

新手上路,请多包涵

如何在标准 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-... 。我想知道我的错误是什么以及如何正确使用 pip。

 $ 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

原文由 nowox 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

您可能有一个错误的 umask 设置为 此处 讨论

从您上次的编辑中,我猜您 umask 设置为 027 。试着做

sudo pip uninstall loremipsum
umask 022
sudo pip install loremipsum

原文由 nowox 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于 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,这是默认的。

原文由 Fabiano Tarlao 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题