在 Pycharm 中,如果右键单击项目内的某个文件夹,可以将其标记为
sources root
,这样就可以从此文件夹及其子文件夹导入模块。
但是这样做只会让你的程序在Pycharm内部运行,如果我尝试从Pycharm外部执行(例如从控制台),它会抱怨找不到某些模块,这就是我面临的问题。
如果我将某个文件夹标记为源根目录,我的程序运行良好,但我需要了解它的作用,这样即使不使用 Pycharm,我也可以配置程序来查找此模块。
我想知道这个选项到底有什么作用,以及如何在不使用它的情况下获得相同的行为。
只是在根文件夹中添加一个
__init__.py
文件?
是不是在做类似的事情:
import sys
sys.path.insert(0, my_folder)
首先
__init__.py
将目录标记为常规包目录(这是 3.3 之前的版本,在 3.3+ 中不再需要)。这样,python 将在该目录中查找子模块以进行导入。
“将目录标记为源根”设置环境的 PATH(或 PYTHONPATH)。在 shell 中,它会像,
export PYTHONPATH="${PYTHONPATH}:/your/source/root"
PYTHONPATH
保存模块文件的默认搜索路径。
这将使解释器能够搜索附加路径中的模块。默认值取决于安装(通常它包含 Python 二进制文件的路径)。
您还可以在 python 文件中使用
sys.path
操作此搜索路径。
这是一个老问题,但在与 PyCharm 的斗争和痛苦之后
Mark as project root
我认为这是值得分享的。
首先,请记住我是在 Windows 11 计算机上执行此操作。
答案:本质上,“将目录标记为源根目录”会将项目的根目录(
src\
文件夹的父级)添加到PYTHONPATH
变量中。
可以通过执行以下操作轻松检查这一点:
CMD
上执行此操作)导航到项目根目录(与 src\
文件夹相同的位置)并激活虚拟环境;python -c "import sys; print('\n'.join(sys.path))"
,让终端打印sys.path
变量的所有值,相当于PYTHONPATH
;Mark as project root
的作用,它将您的项目根目录添加到 sys.path
值中;set PYTHONPATH=%PYTHONPATH%;C:\\--PATH--\\--TO--\\--PROJECT ROOT--;
,此命令会将项目的根添加到 PYTHONPATH
变量中。 (再次执行命令python -c...
就会显示;我希望这能在某个地方得到更好的解释,所以我决定来这里并与将来可能需要这个的人分享。