如何以适当的权限安装python?

nin*_*rio 7 linux root python

所以python安装可能没问题。或者它已经在这里了(我使用的是 xubuntu 12.10)。

但是我今天尝试使用 pip 安装 networkx:

pip install networkx
Run Code Online (Sandbox Code Playgroud)

然后说我没有权限。所以我 sudo 上面的命令。安装没有错误。

现在我不能在没有 root 的情况下导入 networkx。我相当有信心你不应该一直都是 root 来运行 python 脚本。这听起来真的很危险。

easy_install 是这样说的:

easy_install networkx
Run Code Online (Sandbox Code Playgroud)

错误:无法在安装目录中创建或删除文件

尝试添加或删除安装目录中的文件时出现以下错误:

[Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/test-easy-install-13206.pth'
Run Code Online (Sandbox Code Playgroud)

您指定的安装目录(通过 --install-dir、--prefix 或 distutils 默认设置)是:

/usr/local/lib/python2.7/dist-packages/
Run Code Online (Sandbox Code Playgroud)

也许您的帐户没有对该目录的写访问权限?如果安装目录是系统拥有的目录,您可能需要以管理员或“root”帐户登录。如果您没有对这台机器的管理访问权限,您可能希望选择不同的安装目录,最好是在您的 PYTHONPATH 环境变量中列出的目录。

有关其他选项的信息,您可能希望查阅以下文档:

http://packages.python.org/distribute/easy_install.html

请对您的系统进行适当的更改,然后重试。

我还尝试安装到 ~/.networkx (我创建为非 root 的子文件夹)中,但出现相同的权限错误。我 chmod 777 /usr/local/lib/python2.7/dist-packages 并尝试安装,同样的权限错误。

pip uninstall 和 sudo easy_install 会导致与 pip install 相同的问题。

顺便说一下:

python t1.py
Run Code Online (Sandbox Code Playgroud)

回溯(最近一次调用):文件“t1.py”,第 3 行,在 import networkx as nx ImportError: No module named networkx

sudo python t1.py
Run Code Online (Sandbox Code Playgroud)

H:10 ...更多表明其导入和工作正常的东西...

显然,我在安装 python 或...其他任何地方的某个时候只是一个菜鸟。我不知道在哪里,它可能在任何地方。有没有人以前遇到过这个问题,或者有足够的线索知道发生了什么?我需要你的帮助。干杯。

编辑:(有关 Radoo 的更多信息)

sean@potatocake:~$./sh.sh
User is not part of the group which has access to that directory.
/usr/local/lib/python2.7/dist-packages needs access.

sean@potatocake:~$ll /usr/local/lib/
total 12
drwxrwxr-x 3 root root  4096 Mar 28 19:00 perl
drwxrwsr-x 4 root staff 4096 Oct 18 04:07 python2.7
drwxrwsr-x 3 root staff 4096 Oct 18 04:05 python3.2

sean@potatocake:~$ll /usr/local/lib/python2.7/
total 8
drwxrwsr-x 32 root staff 4096 Mar 28 23:13 dist-packages
drwxrwsr-x  2 root staff 4096 Oct 18 04:07 site-packages
Run Code Online (Sandbox Code Playgroud)

注意:当非 sudo pip 仍然不起作用时,我将其改回 775。

sean@potatocake:~$groups
sean adm cdrom sudo dip plugdev lpadmin sambashare

sean@potatocake:~$sudo useradd -G staff sean
useradd: user 'sean' already exists
Run Code Online (Sandbox Code Playgroud)

小智 0

我绝对不是这方面的专家,但这是我的想法。

最好以 root 身份进行安装,这样除了 root 和 sudo 之外,没有人可以修改您的文件和配置。所以我猜你的安装没问题。如果您想安装新软件包,您应该是 root。

至于权限错误,你说你这样做了:chmod 777 /usr/local/lib/python2.7/dist-packages。好吧,这仅提供对最后该目录的访问。您可能有一些父目录没有访问权限(执行权限),这可能会导致您的问题。

要检查当前用户对所有这些目录的权限,您必须对每个目录执行类似的操作(我猜您可以找到更好的版本,但无论如何):

dir="<directory_path>"
user_groups=$(groups <user>)
dir_group=$(stat "$dir" | cut -d' ' -f6)

if ! [[ "$dir_group" =~ "\\b$user_groups\\b" ]]; then printf "User is not part of the group which has access to that directory.\n"; fi

dir_access=$(stat "$dir" | cut -d' ' -f3)
group_dir_exec_access=${dir_access:6:1}

if [ "$group_dir_exec_access" != "x" ]; then printf "This dir needs access.\n"; <add some sudo chmod stuff to give access to group> fi
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。