“将目录标记为源根”到底有什么作用?

问题描述 投票:0回答:2

在 Pycharm 中,如果右键单击项目内的某个文件夹,可以将其标记为

sources root
,这样就可以从此文件夹及其子文件夹导入模块。

但是这样做只会让你的程序在Pycharm内部运行,如果我尝试从Pycharm外部执行(例如从控制台),它会抱怨找不到某些模块,这就是我面临的问题。

如果我将某个文件夹标记为源根目录,我的程序运行良好,但我需要了解它的作用,这样即使不使用 Pycharm,我也可以配置程序来查找此模块。

我想知道这个选项到底有什么作用,以及如何在不使用它的情况下获得相同的行为。

只是在根文件夹中添加一个

__init__.py
文件? 是不是在做类似的事情:

import sys
sys.path.insert(0, my_folder)
python import pycharm
2个回答
13
投票

首先

__init__.py
将目录标记为常规包目录(这是 3.3 之前的版本,在 3.3+ 中不再需要)。这样,python 将在该目录中查找子模块以进行导入。

“将目录标记为源根”设置环境的 PATH(或 PYTHONPATH)。在 shell 中,它会像,

export PYTHONPATH="${PYTHONPATH}:/your/source/root"

PYTHONPATH
保存模块文件的默认搜索路径。 这将使解释器能够搜索附加路径中的模块。默认值取决于安装(通常它包含 Python 二进制文件的路径)。

您还可以在 python 文件中使用

sys.path
操作此搜索路径。


0
投票

这是一个老问题,但在与 PyCharm 的斗争和痛苦之后

Mark as project root
我认为这是值得分享的。

首先,请记住我是在 Windows 11 计算机上执行此操作。

答案:本质上,“将目录标记为源根目录”会将项目的根目录(

src\
文件夹的父级)添加到
PYTHONPATH
变量
中。

可以通过执行以下操作轻松检查这一点:

  1. 在终端上(PyCharm 之外 - 我在 Windows 11
    CMD
    上执行此操作)导航到项目根目录(与
    src\
    文件夹相同的位置)并激活虚拟环境;
  2. 激活虚拟环境后,执行命令
    python -c "import sys; print('\n'.join(sys.path))"
    ,让终端打印
    sys.path
    变量的所有值,相当于
    PYTHONPATH
  3. 您会注意到项目的根目录没有列出 - 这就是
    Mark as project root
    的作用,它将您的项目根目录添加到
    sys.path
    值中;
  4. 您可以通过执行以下命令来复制 PyCharm 的功能:
    set PYTHONPATH=%PYTHONPATH%;C:\\--PATH--\\--TO--\\--PROJECT ROOT--;
    ,此命令会将项目的根添加到
    PYTHONPATH
    变量中。 (再次执行命令
    python -c...
    就会显示;
  5. 最后,如果您现在执行在 PyCharm 中执行的任何命令,该命令也可以在终端上运行;

我希望这能在某个地方得到更好的解释,所以我决定来这里并与将来可能需要这个的人分享。

© www.soinside.com 2019 - 2024. All rights reserved.