如何使用 pip on linux 为所有用户安装模块?
How to install a module for all users with pip on 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-...
。我想知道我的错误是什么以及如何正确使用 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
调用 pip 时使用 --target
选项
pip install --target=/your/pyinstalldir loremipsum
目标目录必须是您的用户可写的位置。
请注意,这需要常规用户环境具有 sys.path
中存在的目标目录。实现这一目标的一种可能方法是使用 PYTHONPATH
env var:
# /etc/profile.d/myenvvars.sh
export PYTHONPATH=/your/pyinstalldir
您可能有一个错误的 umask
集 here
根据你上次的编辑,我猜你 umask
设置为 027
。尝试做
sudo pip uninstall loremipsum
umask 022
sudo pip install loremipsum
使用 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
command/row 可以是可选的...,通常 umask 已经是 022,即默认值。
对于 Ubuntu 18.04 尝试 sudo -H pip install loremipsum
。
-H
是 --set-home
:
的缩写形式
-H, --set-home
Request that the security policy set the HOME environment variable
to the home directory specified by the target user's password
database entry. Depending on the policy, this may be the default
behavior.
换句话说,这会执行 sudo
命令,HOME 环境变量设置为 root 的家。
如何在标准 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
调用 pip 时使用 --target
选项
pip install --target=/your/pyinstalldir loremipsum
目标目录必须是您的用户可写的位置。
请注意,这需要常规用户环境具有 sys.path
中存在的目标目录。实现这一目标的一种可能方法是使用 PYTHONPATH
env var:
# /etc/profile.d/myenvvars.sh
export PYTHONPATH=/your/pyinstalldir
您可能有一个错误的 umask
集 here
根据你上次的编辑,我猜你 umask
设置为 027
。尝试做
sudo pip uninstall loremipsum
umask 022
sudo pip install loremipsum
使用 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
command/row 可以是可选的...,通常 umask 已经是 022,即默认值。
对于 Ubuntu 18.04 尝试 sudo -H pip install loremipsum
。
-H
是 --set-home
:
-H, --set-home
Request that the security policy set the HOME environment variable
to the home directory specified by the target user's password
database entry. Depending on the policy, this may be the default
behavior.
换句话说,这会执行 sudo
命令,HOME 环境变量设置为 root 的家。