VScode中不同目录间python库函数的调用
作者:夜半罟霖 发布时间:2021-03-16 00:24:38
问题描述
vscode中跨目录的模块调用远不如pycharm中的来的简单,在pycharm中即使是不同库文件夹中子函数也可以进行互相调用。而在VScode中则需要我们手动向其中添加依赖路径。如下相同的文件结构,在pycharm中可以简单的在model_arc_pesudo
中导入model
中的模型,而在VScode中则会提示ModuleNotFoundError: No module named 'model'
,因此我们需要手动导入路径。
理论分析
首先我们从依赖路径角度来看看二者的异同,使用如下代码输出依赖路径:
import sys
print("import path!!!!!!")
print(sys.path)
pycharm中输出的依赖路径为:[xxx, ..., 'E:\\python_program\\infant_cognitive',..., xxx]
其中infant_cognitive
项目所在整个文件夹的名字,而vscode中输出的依赖路径则不包括这一项,也就无法自动的找到其子文件夹中model
,从而无法通过语句from model.PSDCNCluster_2 import PSDCN
。
解决方案
既然sys.path
未包含要导入的文件夹,那么直接导入就行,通过在代码最前方添加如下代码实现:
import sys
target_path="./"
sys.path.append(target_path)
print(sys.path)
此处有一个隐含的知识点,在vscode中默认的根路径是项目路径1,而非当前py
文件的路径,所以直接使用"./"
就可通过相对路径来导入infant_cognitive
下所有的文件夹。如果需要导入其他文件夹下的模块,只需要对target_path
进行修改即可,倘若对于相对路径的写法以及os, sys
模块的使用不够熟练,建议是直接使用绝对路径,不易出错。
还有一点值得注意的是,由于此处使用的导入方式是module.function(from model.PSDCNCluster_2 import PSDCN
),那么实际上我们需要导入的是module的上一级路径,也就是infant_cognitive
,而非导入infant_cognitive\model
,这样的话仍然会报错。如果是使用module.function形式导入的话,需要注意要导入的是module的上一级文件夹,不再是sys.append("module")
。或者是使用target_path="./model"
直接搭配from PSDCNCluster_2 import PSDCN
,具体可以去查阅python中的import机制2。
参考文献
vscode的相对路径 ↩︎
关于Python的import机制原理 ↩︎
来源:https://blog.csdn.net/Dr_maker/article/details/128521493


猜你喜欢
- 1.单继承父类也叫基类子类也叫派生类如下所示,继承的关系:继承的书写格式:class 子类(父类):方法实例:class Animal: &
- 1.计算长度value = "wangdianchao"# 计算字符个数(长度)number = len(value)p
- 上一篇博文说了 vue3 项目的 toRefs 函数和 toRef 函数,今天就稍微总结一下 vue3 的计算属性,其实学过 vue2 的宝
- 如下所示:In [1]: import pandas as pd ...: df=pd.DataFrame({"a":[
- 本节内容:本节内容是根据上学期所上的模式识别课程的作业整理而来,第一道题目是Kmeans聚类算法,数据集是Iris(鸢尾花的数据集),分类数
- 最新MySql8.27主从复制以及SpringBoot项目中的读写分离实战1、MySql主从复制MySQL主从复制是一个异步的复制过程,底层
- 先看一下br怎么玩转“清除浮动”了。使用以下代码<br clear="all" />以下是代码效果演示:运行
- 代码'''数据集:Mnist训练集数量:60000(实际使用:10000)测试集数量:10000(实际使用:1000
- 首先说下Golang中的结构体,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,Golang中使用关键字struct来创建一个结
- 多进程共享变量和获得结果由于工程需求,要使用多线程来跑一个程序。但是因为听说python的多线程是假的,于是使用多进程,反正任务需要共享的参
- 一般开发,SQL Server的数据库所有者为dbo.但是为了安全,有时候可能把它换成其它的名称,所有者变换不是很方便.这里列出两种供参考
- 今天主要是来说一下怎么可视化来监控你的爬虫的状态。相信大家在跑爬虫的过程中,也会好奇自己养的爬虫一分钟可以爬多少页面,多大的数据量,当然查询
- 封装为dll会带来很多的好处,主要包括只是产权的保护,以及效率和安全性能的提升。这个例子中被封装的dll文件可以隐藏access数据库的实际
- 本文主要介绍Python3.6及TensorFlow的安装和配置流程。一、Python官网下载自己电脑和系统对应的Python安装包。&nb
- 1.列表(本部分内容出入官方文档)对于这个功能,微信小程序中并没有提供类似于Android中listview性质的控件,所以我们需要使用 w
- 前言我们在django-rest-framework 自定义swagger 文章中编写了接口, 调通了接口文档. 接口文档可以直接填写参数进
- import "strconv"strconv 包实现了基本数据类型和其字符串表示的相互转换。string与int类型转
- 效果图如下:图1(头像图片剪成圆形的,其他为透明)图2(给图片的4个角加椭圆)以前没处理过,处理起来真是有点费力呀。用到的模块:import
- 我们在开发过程中,经常遇到这样问题,就是要求定期进行数据库的检查,如果发现特定数据,那么就要进行某项操作,这个需求呢,有两种做法,一是利用W
- 巧用get和set,能够直接操作对象属性实现读写,可以极大的提高编程效率,给出一个典型示例: var test = { _Name : nu