问题:
以下问题时我在引用本地文件时,系统总是显示找不到相关文件:
有时候程序能够运行,但是调试缺显示找不到文件,有时候反过来。后来反应过来,是程序启动时,默认位置不一样。
Traceback (most recent call last):
File "d:\Xu\Desktop\Le\Pycharm\NetCode\git-learn\learn-Code\test4\test5\test5.py", line 7, in <module>
import test2_t2
ModuleNotFoundError: No module named 'test2_t2'
解决方法:将系统非调试启动和调试启动的默认位置调成一样,并且通过以下代码将所要引用的文件/文件夹的上级目录包含到 sys.path 中:
import sys
sys.path.append('../../learn-code')
import test2_t2
# ../../learn-code 表示从当前启动程序所在的目录,向上倒退两级文件夹,找到learn-code文件夹,
# 引入该文件下的 est2_t2 文件夹
程序启动时的默认位置修改:
程序启动时的默认位置可以通过以下代码查看:
import os
print(os.getcwd())
1,非调试启动 - Run Python File
a)系统默认从最上层文件夹开始 - Folder
b)通过设置 - 扩展 - Python - Execute in File Dir,设置为True,系统启动默认位置会改成从运行时的文件所在位置
2,调试启动 - Python:调试程序 使用launch.json
a)系统默认从最上层文件夹开始 - Folder
b)通过在 launch.json 文件中添加 "cwd": "${fileDirname}",系统启动默认位置会改成从运行时的文件所在位置
3,关于 CWD 后面的参数解释:
假设项目地址为:D:\Xu\Desktop\project\
当前文件为: D:\Xu\Desktop\project\test1\test2\main.py
- ${workspaceFolder} :当前打开文件夹所在项目的文件路径- D:\Xu\Desktop\project
- ${workspaceFolderBasename} :当前打开项目文件夹名字- project
- ${fileBasename} :当前打开的文件的文件名+后缀名- main.py
- ${fileDirname} :当前打开的文件所在文件夹的绝对路径- D:\Xu\Desktop\project\test1\test2
- ${relativeFileDirname} :当前打开的文件所在文件夹的相对路径- 相对于${workspaceFolder} 文件-test1\test2
- ${fileExtname} :当前打开的文件的扩展名- .py
- ${fileWorkspaceFolderBasename} :当前打开的文件工作区文件夹名称- project
- ${file} :当前打开的文件的绝对路径+文件名+后缀名- D:\Xu\Desktop\project\test1\test2\main.py
-
${relativeFile} :当前打开的文件所在文件夹相对 ${workspaceFolder} 文件的相对路径+文件名+扩展-test1\test2\main.py
文件运行时,系统默认的启动位置不同,会导致无法引用一些自己写的库函数,一般会选择 ${fileDirname} 当前目录,或者 ${workspaceFolder} 项目目录作为启动位置。
参考
VS code 中的各种变量 ${file},${fileBasename}:https://blog.csdn.net/bailsong/article/details/77527773