`pip install` 命令会将当前目录添加到 PYTHONPATH 中吗?

4

如果我有一个包含setup.py文件的Python项目,我可以运行pip install --user -e .。这将安装设置文件中列出的所有要求,并将当前项目添加到我的pip列表中:

$ pip show project-name                                                                                
Name: project-name                                                                                    
Version: 1.0.0                                                                             
Summary: None                                                                                                                             
Location: /path-to-project/                    
Requires: matplotlib, numpy, scipy, ...                                                    
Required-by:   

这会默认将\path-to-project\添加到用户的PYTHONPATH中吗?还是需要手动添加,以便您可以从系统上任何位置通过import project-name导入代码?

1个回答

7
不需要修改 PYTHONPATHpip 会使用 Python 安装项目时设置的标准路径。运行 pip install --user 时,已将软件包安装在标准位置,无需进行任何更改。
使用 -e 安装的项目使用 egg link 文件,并添加到标准位置的 .pth 文件中。所显示的位置列在 project-name.egg-link 文件中(实际上只是用于跟踪包的元数据),并将同一路径添加到相同目录中的 easy-install.pth 文件中。Python 在启动时自动将列在 .pth 文件中的任何路径添加到模块搜索路径中(这由site 模块 处理)。
当您运行 pip show 时,也会使用相同的标准路径再次找到该项目;命令是否有效表明该项目已正确安装,并且已在 Python 模块搜索路径上。
可以通过运行 python -m site 来验证路径。由于使用了 --user 开关安装软件包,因此 pip 使用的位置会显示为 USER_SITE 路径。检查该路径以查找 *.egg-linkeasy-install.pth 文件。

我不确定我理解你的回答,我没有使用pip从PyPI安装软件包。我正在安装一个包含setup.py的Python项目,因此这不会像在site-packages中一样安装,而是安装到/path-to-project/,如我问题中的pip show所示。那么我是否需要将/path-to-project/添加到我的PYTHONPATH中才能导入该项目的代码,还是pip已经自动完成了? - Jack Wetherell
@jw1294:抱歉,我的回答不够完整。我已经添加了额外的指针,以显示如何处理“-e”项目。 - Martijn Pieters
好的,这样就清楚了,所以egg文件会被创建在site-packages中,并且其中包含项目的位置? - Jack Wetherell
@jw1294:是的,但这并不是 Python 找到项目的方式。这是 pip 和其他工具知道该项目是由工具安装而不是手动编辑的方式。路径也会添加到一个 .pth 文件中(这里是 easy_install.pth),并且该文件被用于将其他路径添加到 sys.modules 中。 - Martijn Pieters
1
@jw1294:因此,删除.egg-link文件不会从Python模块搜索路径中删除该项目,但是编辑easy_install.pth以删除路径将会起作用。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接