如何解决 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 文件的开头加入如下一段代码:

同样可以看到问题解决了,但是如果我有很多这样的文件夹和文件,这样的操作是很麻烦的,有没有什么好的解决办法呢?
我们可以利用.pth 文件来将我们的包添加到环境路径里面。
创建虚拟环境 env
在 site-packages 文件下面添加一个 mypath.pth 文件。该文件中写入的就是我们项目的根目录
修改后的工程目录

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

可以看到,没有报错。这样我们无论有多少个类似 test 这样的文件夹或者 demo.p 这样的文件,都可以正常的导入自定义的包。
好了,今天的分享就是这些,希望对你有所帮助,也欢迎大家转发该文章给有需要的朋友。
我是 Tango,一个热爱分享技术的程序猿,我们下次见。
版权声明: 本文为 InfoQ 作者【IT蜗壳-Tango】的原创文章。
原文链接:【http://xie.infoq.cn/article/390916b34c41a79f2900e0069】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论