为什么PyCharm总是在我的PYTHONPATH中添加"内容根",以及什么是PYTHONPATH?

oro*_*ome 13 configuration path python-import pycharm

我对PyCharm如何确定Python用于定位模块和包的路径感到困惑.

首先,当我取消选中设置时(在"Python控制台"和我的运行配置中),我仍然会在开始时看到我的项目的目录sys.path.

例如,我在"路径问题"和"运行"包含的文件中有项目

import sys
for p in sys.path:
    print p
Run Code Online (Sandbox Code Playgroud)

我明白了

/Users/Rax/Documents/Projects/pathproblem
... (other things in my PYTHONPATH)
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC
/Library/Python/2.7/site-packages
Run Code Online (Sandbox Code Playgroud)

即使我已经要求将"内容根"排除在路径之外:

在此输入图像描述

这可以导致成功导入在典型部署中无法导入的模块(例如,在构建包时).

如果我检查设置,我得到它两次:

/Users/Rax/Documents/Projects/pathproblem
... (other things in my PYTHONPATH)
/Users/Rax/Documents/Projects/pathproblem
...
Run Code Online (Sandbox Code Playgroud)

似乎PyCharm 总是在PYTHONPATH的开头(它认为是)PYTHONPATH添加当前的项目根,并且这个设置最后添加它.

(1)如何配置PyCharm以便它(实际上)不将项目目录添加到包搜索路径?

另外,就我所知,PYTHONPATH,对于PyCharm来说,根本不是我的系统PYTHONPATH,而是"用户添加"条目 - 实际上,令人困惑的是,在Python解释器的Path设置的末尾.

(2)PyCharm的PYTHONPATH来自哪里?这不是我在系统中其他地方看到的PYTHONPATH.


FWIW,PyCharm的Sphinx尊重"内容根"设置,仅在构建配置中检查路径时添加内容根.

Gam*_*iac 14

首先,当我取消选中设置时(在"Python控制台"和我的运行配置中),我仍然在sys.path的开头看到我的项目的目录.

这应该是因为PyCharm默认将项目路由添加到Path.

(1)如何配置PyCharm以便它(实际上)不将项目目录添加到包搜索路径?

据我所知,你做不到.但是,您可以执行不将文件添加到内容路由的操作.但是,在向您展示如何执行此操作之前,请让我解释为什么它将目录的当前根添加到其路径中.当你打开python控制台时:

                                                在此输入图像描述

现在,我有一个名为的文件foo.py,在该文件中我有一个名为的函数bar,所以我可以轻松地将该函数导入我的控制台:

在此输入图像描述

如上图所示,PyCharm会自动添加您当前的根目录.这应该不足为奇,因为当你cd进入一个目录并运行类似的东西时python foo.py,你隐含地将当前的根添加到你的路径中.为了在python控制台中模拟它,PyCharm添加了当前的根.

为避免这种情况,您可以当前根目录中简单地创建一个文件夹,并将其标记为源根目录:

                 在此输入图像描述

由于您的Source根目录不会添加到路径中,因此您可以轻松休息:

                    在此输入图像描述

(2)PyCharm的PYTHONPATH来自哪里?这不是我在系统中其他地方看到的PYTHONPATH.

它来自您的翻译设置:

在此输入图像描述

通常,PYTHONPATH它实际上是包含标准库文件的所有目录的集合,也是第三方库文件的集合.


yol*_*ole 5

在本例中,“projects/pathproblem”是由 Python 本身而不是 PyCharm 添加到 sys.path 中的。请参阅http://docs.python.org/2/library/sys.html#sys.path:“在程序启动时初始化,此列表的第一项 path[0] 是包含脚本的目录用于调用 Python 解释器。”

为了回答你的第二个问题,PyCharm 通过使用脚本运行选定的 Python 解释器来打印 sys.path 的内容,记录其结果,然后根据项目设置(Django、App Engine 等)添加必要的更改来构建 PYTHONPATH