没有模块名称 pip:更改 python 文件夹的权限后

no module name pip : after changing permission of python folder

这是我在搞砸一切之前所做的:

我尝试使用 pip3 安装包,下载了很长时间后突然出现关于权限的错误,因为我一开始忘记使用 sudo 并且因为我不想再次下载包并且不知道 pip 缓存文件夹在哪里,我做了一件非常愚蠢的事情我更改了 /usr/bin/ 中整个 python 文件夹的权限以安装没有 sudo 的包,之后我尝试了这个:

pip3 install tensorflow
File "/usr/bin/pip3", line 7, in <module>
    from pip import main
ImportError: No module named 'pip'

我遇到了这些该死的错误, 谁能帮我解决这个问题?

编辑: 这是我使用的命令序列:

1 - pip3 install tensorflow -- 出现错误

2 - sudo find /usr/lib/python3.5/ -type d -exec chmod 766 {} \;

3 - sudo find /usr/lib/python3.5/ -type f -exec chmod 766 {} \;

首先,也是最重要的,我认为你的做法很不明智。您现在已经为所有者、组和其他人更改了所有文件和目录的权限。

原则上,您只需要确保 pip3(通过扩展,您的用户帐户)能够在 root 拥有的目录(大概是 /usr/lib/python3.5/site-packages)中写入文件和目录。您可以通过以下方式完成此操作:

sudo chmod o+w /usr/lib/python3.5/site-packages

或者您可以更改此文件夹的所有权。 重要提示:在做这种事情的时候,一定要清楚自己在做什么,不要忘记尽快把所有的东西都改回来。事情可能会被破坏,并且可能会产生安全问题。

现在来解决您的问题。您现在已为目录授予以下权限 -rwxrw-rw-(6 = 4(读)+ 2(写))。但是,对于用户和代表它执行的程序来说,要执行任何操作 to/from 他们需要执行权限的目录。为此,您应该使用 5 而不是 6(5 = 4(读取)+ 1(执行))。更正:

sudo find /usr/lib/python3.5/ -type d -exec chmod 755 {} \;

然后,我认为为了 Python 正确加载已编译的库(共享对象或 .so 文件),它们也应该具有这些权限。从我自己的 Python 目录来看,我可能会这样做:

sudo find /usr/lib/python3.5/ -type f -exec chmod 644 {} \;
sudo find /usr/lib/python3.5/ -type f -iname '*.so' -exec chmod 755 {} \;

将一切设置回原来的状态。

P.S。我不是 pip 方面的专家,所以我不知道在重试安装失败时避免 pip 重新下载的协议是什么。