python-3.x - 原因导致python包的位置不同
问题描述
我是 Linux 系统的新手,没有操作系统的背景知识。
我有一些关于导入 numpy 的问题,但我解决了。
但是心里还是有一些疑问。
我知道我可以使用以下代码来了解 Python 在哪里找到包
import sys
sys.path()
在我的情况下,它提供了几个选项:
/home/twotwo/.local/lib/python3.6/site-packages
/usr/local/lib/python3.6/dist-packages
/usr/lib/python3/dist-packages
我想知道它们之间的区别。
我想第一和第二之间的差异是由我下载它的方式引起的,如下所述,如果不是请纠正我。
我们建议使用用户安装,使用 --user 标志来 pip(注意:不要使用 sudo pip,这可能会导致问题)。这将为您的本地用户安装软件包,并且不会写入系统目录。
第二个和第三个都/usr
在开头。
但是还是有区别的,一个有local
一个没有。
总结我的问题:
(1) 两者的区别:
/home/twotwo/.local/lib/python3.6/site-packages
/usr/local/lib/python3.6/dist-packages
(2) 两者的区别:
/usr/local/lib/python3.6/dist-packages
/usr/lib/python3/dist-packages
(3) 实际上,其中两条路径都有numpy,但是python如何选择要导入的路径呢?
非常感谢大家,祝您有美好的一天!
解决方案
您的问题主要是关于 Linux 文件系统布局。您可以阅读很多相关信息,例如在 Wikipedia 上,更具体地了解这个 askubuntu questionlib
中的不同位置。
我将尝试通过总结三个给定文件夹的常规使用方式来回答(1)和(2):
/usr/lib/python3/dist-packages
包含系统使用包管理器安装的非主机特定模块,例如在 Ubuntu 上使用sudo apt-get python-numpy
./usr/local/lib/python3.6/dist-packages
包含您通过包管理器在系统范围内安装的模块,例如使用sudo pip install numpy
.sudo pip
(正如您正确提到的那样,使用可能会导致问题。)/home/twotwo/.local/lib/python3.6/site-packages
包含用户twotwo
在他自己的用户目录中安装的模块,例如在用户模式下使用 pip。这些模块只能由 导入twotwo
,因为它们不会出现在其他用户的 PATH 变量中,甚至可能无法被其他用户读取。
另请注意,命名dist-packages
是使用 debian 包安装的 python 包的 Debian(和衍生品)特定约定,如此处所述。在手动 python 安装中,相应的文件夹将被命名site-packages
为 pip 的标准。
关于问题(3):有关此的详细信息可以在 Python 3 文档中阅读。基本上,在运行 python 脚本的文件夹中查找模块后,sys.path
变量中的文件夹将按照它们在此处列出的顺序进行查找。一旦找到匹配名称的模块,它就会被导入。
注意:您的问题与 numpy 无关,因此应删除该标签。
推荐阅读
- c# - 在非常简单的属性更新期间,Okta 的“请求正文格式不正确”
- android - 使用 gradlew assembleRelease 从本机反应创建发布 apk 时出错
- javascript - 基于laravel刀片中属性值的条件语句
- c# - 在 MVC Web 应用程序中计算员工的剩余假期天数?
- reactjs - 尝试创建新的 React 应用程序时出现错误 404
- spring-boot - Keycloak:我可以为每个客户端身份验证请求设置空闲会话超时吗?
- c# - C# SecureString 如何在用户想要查看时显示密码?
- ethereum - 可靠地在账户之间转账
- java - 为什么无需请求就授予 WRITE_CONTACTS 权限?
- image-processing - 使用 Windows Image Viewer 可以预览图像,但为什么浏览器无法呈现它?