Bootstrap

如何解决Python项目在VScode中跨文件夹导包问题

VScode是一个非常优秀的代码编辑软件,尤其当你同时使用多门开发语言的时候。Python目前是我的主力开发语言,可就在不久前遇到了一个很麻烦的事情---跨文件夹导入自定义包。总是提示:ModuleNotFoundError: No module named 'xxxxx'

今天终于找到了解决办法,和大家分享一下。

问题背景

我们创建了一个目录如下的Python工程

│ main.py

├─lib

│ ├─api_info

│ │ api.py

│ │ __init__.py

│ │

│ └─common

│ log.py

│ __init__.py

└─test

demo.py

项目需求:

在test/demo.py文件中引入lib/api_info下面的api.py。

问题来了

我们在编写代码时是可以正常提示包里的方法

但是运行的时候会出现如下错误

我们尝试在项目的根目录下面的main.py进行同样的操作

可以到没有任何报错信息,因此可以判断是test这个文件导致的跨文件夹的问题。

解决办法

我们可以在test目录下面的python文件的开头加入如下一段代码:

import sys

sys.path.append("..") 

同样可以看到问题解决了,但是如果我有很多这样的文件夹和文件,这样的操作是很麻烦的,有没有什么好的解决办法呢?

我们可以利用.pth文件来将我们的包添加到环境路径里面。

创建虚拟环境env

python -m venv env

在site-packages文件下面添加一个mypath.pth文件。该文件中写入的就是我们项目的根目录

D:\Work\API\Test

修改后的工程目录

将demo.py文件中刚刚添加的内容删除,还原到最原始的状态,再次运行该文件

可以看到,没有报错。这样我们无论有多少个类似test这样的文件夹或者demo.p这样的文件,都可以正常的导入自定义的包。

好了,今天的分享就是这些,希望对你有所帮助,也欢迎大家转发该文章给有需要的朋友。

我是Tango,一个热爱分享技术的程序猿,我们下次见。