目录
- 问题引入
- 解决问题之前的小小知识点
- 解决方案one,通过env设置PYTHONPATH环境变量
- 解决方案two,通过envFile设置PYTHONPATH环境变量
- 解决方案three,通过设置PYTHONPATH环境变量
问题引入
在使用vscode中,虽然vscode可以高度自定义,里面的一些插件确实也让自己难以自拔。但是,与Pycharm比较,还是有一些瑕疵的,比如说包以及模块的导入。在Pycharm中因为它是自己把工程目录给加入到中,所以在导包方面还是非常非常的nice de。
如下面一个工程的结构,工程名是experiences
,下面有parent
包。parent
包有parent_main.py
以及child
子包,child
包里面有模块child_main.py
。
experiences
--------parent
----------------parent_main.py
----------------child
------------------------child_main.py
parent_main.py
def parent_main_func():
print('parent_main_func')
if __name__ == '__main__':
import sys
for a_path in sys.path:
print(a_path)
在Pycharm运行parent_main.py
,可以得到结果:
D:\nwq\Documents\pythonProjects\experiences\parent
D:\nwq\Documents\pythonProjects\experiences
D:\miniconda3\
D:\miniconda3\DLLs
D:\miniconda3\lib
D:\miniconda3
D:\miniconda3\lib\site-packages
D:\miniconda3\lib\site-packages\win32
D:\miniconda3\lib\site-packages\win32\lib
D:\miniconda3\lib\site-packages\Pythonwin
在vscode中运行parent_main.py
,可以得到结果:
d:\nwq\Documents\pythonProjects\experiences\parent
D:\miniconda3\
D:\miniconda3\DLLs
D:\miniconda3\lib
D:\miniconda3
D:\miniconda3\lib\site-packages
D:\miniconda3\lib\site-packages\win32
D:\miniconda3\lib\site-packages\win32\lib
D:\miniconda3\lib\site-packages\Pythonwin
两者相比,很明显可以得到vscode中少了路径D:\nwq\Documents\pythonProjects\experiences
,即工程路径。这使得在vscode导包时会不舒服。举个栗子,在child_main.py
文件中在pycharm是可以导入parent
模块的,但是在vscode中却会报:ModuleNotFoundError: No module named 'parent'
错误。child_main.py
if __name__ == "__main__":
from parent.parent_main import parent_main_func
parent_main_func()
解决问题之前的小小知识点
vscode有两个重要的配置文件:和。是使用VS Code运行调试程序的启动设置,包括设置环境变量,使用哪个解释器,debug类型以及程序入口等等。
是VS Code程序的设置选项,包括快捷键,插件设置等等。
在Python中有一个环境变量PYTHONPATH,在得到模块搜索路径时,PYTHONPATH
会和其他模块搜索路径连接在一起得到程序的模块/包搜索路径。所以下面的方法都是通过设置PYTHONPATH
环境变量实现。
解决方案one,通过env设置PYTHONPATH环境变量
因为可以设置环境变量,所以在
可以添加
PYTHONPATH
环境变量,那么就可以实现把自己想要加入的包导入到路径中了。根据官网的介绍可以在中设置变量
env
来设置PYTHONPATH
值,具体设置代码如下,重点是最后一行设置env
项。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: /fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: 当前文件",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"env": {"PYTHONPATH":"${workspaceFolder};${env:PYTHONPATH}"}
}
]
}
在.vscode
文件夹下保存,按下F5
键debug
代码,那么就可以得到结果,而不是报找不到模块错误。:
parent_main_func
但是当你点击右上角Run Python File in Terminal
按钮时,还是会报错的哦。
解决方案two,通过envFile设置PYTHONPATH环境变量
通过envFile
设置PYTHONPATH
环境变量既可以在也可以在
中设置,下面是其设置的代码。
envFile
是一个存储变量的文件,后缀名为.env
。${workspaceFolder}
是工作空间文件夹路径名。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: /fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: 当前文件",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
// "env": {"PYTHONPATH":"${workspaceFolder};${env:PYTHONPATH}"}
"envFile": "${workspaceFolder}/.env"
}
]
}
{
"": "autopep8",
"": "D:\\miniconda3\\",
"": "${workspaceFolder}/.env",
}
.env
PYTHONPATH="${workspaceFolder};${env:PYTHONPATH}"
和设置env
一样,可以debug
运行,但是右上角Run Python File in Terminal
按钮时,还是会报错的哦。
解决方案three,通过设置PYTHONPATH环境变量
设置的环境变量可以在
VS Code
运行的Windows终端下使用。是在文件中设置的。
{
"": "autopep8",
"": "D:\\miniconda3\\",
// "": "${workspaceFolder}/.env",
"": {"PYTHONPATH":"${workspaceFolder};${env:PYTHONPATH}"}
}
无论你是按F5
键debug
还是点击右上角Run Python File in Terminal
按钮,都可以很好地解决哦。