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

2024-06-10 18:27:06 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用pip在标准python环境/usr/local/lib/python2.7/dist-packages中安装一个包,并使这个新包在不使用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

Tags: installpippylibpackagesusrlocaldist
3条回答

调用pip时使用--target选项

pip install --target=/your/pyinstalldir loremipsum

目标目录必须是用户可写的位置

请注意,这要求常规用户环境在sys.path中存在目标目录。实现这一点的一种可能方法是使用PYTHONPATHenv变量:

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

您可能有一个错误的umask集,如前所述here

根据上次编辑,我猜您umask设置为027。尽力

sudo pip uninstall loremipsum
umask 022
sudo pip install loremipsum

对于ubuntu18.04,在我的例子中,使用命令sudo pip install stuff-name不足以在全局路径中安装模块(它一直在查看本地用户python路径)

我的解决方案

我已更改为用户,并将目录更改为其主目录。然后pip安装按预期工作,并在全局路径中安装模块

详细地说,我遵循了nowox的答案,并做了一个小改动(sudo su,对root用户进行了改动),另请参见关于umask 022的最后一个注释:

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

注意:umask 022命令/行可以是可选的…,通常umask已经是022,这是默认值

相关问题 更多 >