我是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标志来点子化(注意:请勿使用sudo pip,否则可能会引起问题)。这将为您的本地用户安装软件包,并且不会写入系统目录。
第二个和第三个都在开头/user
但是它们之间仍然存在差异,一个拥有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如何选择要导入的路径?
非常感谢大家,祝您有愉快的一天!
答案 0 :(得分:1)
您的问题主要是关于Linux文件系统布局的。您可以阅读很多有关此内容的信息,例如on Wikipedia,并且更详细地了解this askubuntu question中不同的lib
位置。
我将通过总结常规使用三个给定文件夹的方式来尝试回答(1)和(2):
/usr/lib/python3/dist-packages
包含系统使用软件包管理器安装的非特定于主机的模块,例如,在具有sudo apt-get python-numpy
的ubuntu上。
/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变量中,甚至可能无法被其他用户读取。
关于问题(3):有关此问题的详细信息,请阅读in the Python 3 docs。基本上,在运行python脚本的文件夹中查找模块后,sys.path
变量中的文件夹会按照在其中列出的顺序 进行查找。找到匹配名称的模块后,就会将其导入。
注意:您的问题与numpy无关,因此应删除该标记。