当前位置: 首页 > news >正文

VScode中不同目录间python库函数的调用

问题描述

 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

参考文献


  1. vscode的相对路径 ↩︎

  2. 关于Python的import机制原理 ↩︎

相关文章:

  • C语言版扫雷——从0到1实现扫雷小游戏
  • 机器学习笔记 - 模式识别之图像特征提取和特征选择的基本方法总结
  • APP应用渗透测试思路
  • 微信小程序框架
  • 网络编程 udp/ip协议 c/s模型
  • 【数据结构】C语言实现链表(单链表部分)
  • JAVA练习8
  • 聊聊最适合程序员的画图工具
  • JAVA数据结构篇--12理解LinkedHashSetTreeSet
  • DR_CAN基尔霍夫电路题解法【自留用】
  • 21级数据结构考前模拟题
  • 剑指offer----C语言版----第六天
  • Qt音视频开发08-ffmpeg内核优化(极速打开/超时回调/实时响应)
  • 网络安全一哥的奇安信发布了全球高级可持续威胁年度报告 值得学习
  • 13---SpringBoot整合JWT,实现登录和拦截
  • 【React系列】如何构建React应用程序
  • 【个人向】《HTTP图解》阅后小结
  • 10个最佳ES6特性 ES7与ES8的特性
  • Bytom交易说明(账户管理模式)
  • Invalidate和postInvalidate的区别
  • JavaWeb(学习笔记二)
  • select2 取值 遍历 设置默认值
  • underscore源码剖析之整体架构
  • 闭包--闭包之tab栏切换(四)
  • 观察者模式实现非直接耦合
  • 扑朔迷离的属性和特性【彻底弄清】
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 通过npm或yarn自动生成vue组件
  • UI设计初学者应该如何入门?
  • #{}和${}的区别是什么 -- java面试
  • #define用法
  • $(function(){})与(function($){....})(jQuery)的区别
  • (13)Hive调优——动态分区导致的小文件问题
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)创业的注意事项
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET 回调、接口回调、 委托
  • .NET/C# 使用反射注册事件
  • .NET6 命令行启动及发布单个Exe文件
  • .net操作Excel出错解决
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • ??eclipse的安装配置问题!??
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [BT]BUUCTF刷题第4天(3.22)
  • [C++提高编程](三):STL初识
  • [hdu2196]Computer树的直径