python导包路径问题_python的导包问题

有事会遇到在python代码中导入包错误问题,本文简单对python包的引入做简单介绍

简单说,我认为python导包一共有3种情况,分别是:

要导的包与当前文件在同一层

要导的包在当前文件的底层(就是与当前文件夹同级的文件夹里)

要导的包在当前文件的上层

1、要导的包与当前文件在同一层

use.py

source.py

use.py表示包的调用方,source.py则是被调用方(下面的几种情况同)

这种情况下直接from 文件名 import 函数/类/变量 就行了

如 from source import Source

运行use.py 会成功输出success

要导的包在当前文件的底层

新建一个wrap文件夹,把source.py放进去

这时use.py导入source.py应该是

from wrap.source import Source

如果里面有多层结构,多用几个点就能解决了

要导的包在当前文件的上层

这种情况是最复杂的一种,我们把上面那种情况的source.py和wrap.py换个位置

现在use.py在wrap文件夹里面了,而source.py跑到wrap文件夹外面了

现在use.py要调用source.py应该怎么样调用呢

这时候就需要把文件根目录放入,python包的搜索路径里面。

大家想一想我们调用pip下来的包或者模块的时候,从来都不需要指定什么路径吧,直接使用包名或者模块名就能使用了,比如 import os。

这正是因为pip下来的包或模块所在的文件夹处于python默认的搜索路径里面。py文件import文件的时候,先在当前目录找,找不到就去python的搜索路径里找,因此我们只需要把当前工程的根目录放入python的搜索路径就可以了。

具体操作如下:

在导入我们想导入的包之前,把当前项目的根目录放入python的搜索路径种,这样就能成功导入了。

os.path.dirname(file)

这句的代码的意思是:获取当前文件所在目录的相对路径,当前文件所在文件夹的相对路径就是 **.**了。

os.path.abspath(os.path.dirname(file))

这句代码的意思是把上面获取的相对路径变成绝对路径,我这里是D:\test\wrap,也就是use.py所在文件夹的绝对路径。

os.path.dirname( os.path.abspath(os.path.dirname(file)))

这句代码的意思是获取上面所得到的路径的上一级路径,我这里就得到了D:\test,这个也是我的项目的根路径。

sys.path.insert(0,BASE_DIR)

这句代码表示把BASE_DIR写入到python搜索路径里。

以上写法并非固定,大家根据自己的文件夹结构来写

这样我的D:\test这个路径就加入到python搜索路径中了。

现在我导入Source,只需要这样写 from source import Source,因为source在D:\test目录下,所以能搜索到,同理D:\test的子文件夹里的文件导入方式就可以写出 from wrap.source import Source,注意从插入的根路径开始写路径就行了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

垃圾代码还能出圈?手把手教你写垃圾代码,从入门到精通!

全世界只有3.14 % 的人关注了爆炸吧知识转自:机器之心参与:思如果说到什么是好代码,我们肯定都能说出一堆规则,例如使用一致的格式和缩进、使用清晰的变量名和方法名、在必要时提供文档与注释、不要过度精简代码等等。但是对于什么…

winform能连MySQL吗_c# winform中怎么连接mysql

匿名用户1级2018-11-19 回答static string myConnstr "serverip;user idroot; passwordpasswd;databasedb;poolingfalse;charsetgbk;";//System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls false;public static MySqlConnection GetMyConnection(){My…

User Experience Kit

User Experience Kit(UEK) 是微软官方发布的,集成了有关如何使用 Silverlight 3, Silverlight 4 实现有关媒体发布、数字化营销、以及使用 Silverlight 构建客户端的最新案例、白皮书以及部分源码。从这里下载 UEK 的概览. 网站地址&#xff…

java以Blob形式存储,读取图片并在jsp页面显示图片流

2019独角兽企业重金招聘Python工程师标准>>> 废话少说代码伺候: 封装好的ImageUtil类:目的读取本地的图片文件并存入数据库,然后读出数据库中以Blob形式存储的图片保存到指定目录。 1 package org.blog.util; 2 import java.io.F…

“ShardingCore”是如何针对分表下的分页进行优化的

首先还是要给自己的开原框架打个广告 sharding-core 针对efcore 2版本的分表组件&#xff0c;首先我们来快速回顾下目前市面上分表下针对分页常见的集中解决方案分表解决方案解决方案skip<100skip<10000skip>10000优点缺点内存分表速度快O(n)&#xff0c;nskip*分表数…

docker pull 私有_【赵强老师】管理Docker镜像

一、什么是Docker的镜像Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化&#xff0c;容器是完全使用沙箱机制&#xff0c;相互之间不会有任何…

看着女朋友的肚子,以肉眼可见的速度大起来......

1 女生的肚子有多神奇▼2 你的论文除了导师真没人想要▼3 脑子&#xff1a;各部门注意&#xff01;这次一定可以&#xff01;手&#xff1a;&#xff1f;&#xff1f;&#xff1f;▼4 这孩子可能是高估了自己的大长腿▼5 到处说前男友死了算违法吗&#xff1f;▼6 男人妖…

《Android开发从零开始》——25.数据存储(4)

本节课的主要内容有&#xff1a;1.讲解Android中于I/O流有关的两个方法2.演示如何在Android中读写文件 课程下载地址&#xff1a;http://u.115.com/file/clc87txb课件及源码下载地址&#xff1a;http://u.115.com/file/aq8w11l7转载于:https://www.cnblogs.com/coolszy/archive…

添加CSS的四种方式

1、直接添加在HTML的标识符&#xff08;标签&#xff09;里&#xff1a; <p style"color: blue;font-size: 12pt">样式</p> 2、添加在HTML的头信息标识符<head>里&#xff1a; <head> <style type"text/css"> …… </sty…

违反GPL协议,法院判罚了!国内首例

整理 | 一君出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;近日&#xff0c;一起关于 GPL 版权纠纷案裁判文书公示。一审判决书显示&#xff0c;GPL3.0 协议是一种民事法律行为&#xff0c;具有合同性质&#xff0c;可认定为授权人与用户间订立的著作权…

开篇 — 【面向对象设计模式学习】

说明&#xff1a; 关于设计模式的文章网上已经很多了&#xff0c;本人也只是想参考别人的文章来系统地学习一下设计模式&#xff0c;因此&#xff0c;这个系列并不是一个系列教程&#xff0c;而仅仅是作为本人学习设计模式的一个学习笔记&#xff0c;此外&#xff0c;由于本人能…

python中random什么意思_python中的random

random.randint(a,b) 用于生成一个指定范围内的整数&#xff0c;a为下限&#xff0c;b为上限&#xff0c;生成的随机整数a<n<b;若ab&#xff0c;则na&#xff1b;若a>b&#xff0c;报错 import random random.randint(10,20)#输入18 random.randint(10,10)#输出10 ran…

魔方数算法

魔方数是什么,就是从1...x个自然数排列,每一行,每一列,对角线的和都相等的矩阵(方阵?). 我有一些想法,但是暂时还没有找到解决的灵活方案. 首先,每一行相当,那就是数列的总数Z/行数z (这个是行,列,对角线的统一和). 列的情况也类似Z/列数z 对角线的情况比较复杂,找不到规律.但…

又来了!深度学习PyTorch与TensorFlow到底哪家强?

全世界只有3.14 % 的人关注了爆炸吧知识自从2012年深度学习再一次声名鹊起以来&#xff0c;许多机器学习框架都争先恐后地要成为研究人员和行业从业者的新宠。面对如些众多的选择&#xff0c;人们很难判断最流行的框架到底是什么。在某些情况下&#xff0c;深度学习或深度迁移学…

mysql从多个表查询数据类型_MySQL 之 多表查询

阅读目录一.多表联合查询#创建部门CREATE TABLE IF NOT EXISTSdept (didint not null auto_increment PRIMARY KEY,dnameVARCHAR(50) not null COMMENT 部门名称)ENGINEINNODB DEFAULTcharset utf8;#添加部门数据INSERT INTO dept VALUES (1, 教学部);INSERT INTO dept VALUES …

注意指针修饰符的准确含义

首先从一起多线程无锁算法的事故说起,以下是一个无锁栈的实现测试,但在开-O2以上优化的情况下它却无法正常工作: #include "lf_stack.h" #include "kn_list.h" #include "kn_time.h" #include "kn_thread.h" #include "kn_atomic…

通过 GitExtensions 来使用 Git 子模块功能

通过 GitExtensions 来使用 Git 子模块功能目录一、前言二、Git 子模块三、子模块更改提交四、更新子模块五、[附] 去除最近的提交记录独立观察员 2021 年 9 月 5 日一、前言众所周知&#xff0c;编程&#xff0c;尤其是面向对象编程的一个重要思想就是 “封装”&#xff0c;可…

Linux系列-Red Hat5平台下的Postfix邮件服务搭建(二)

咱们接着上次的说&#xff0c;本次没有小标题。想了半天也没想出个好名子来&#xff0c;因为这次我们要做三件事&#xff1a;1.搭建基于Postfix的webmail&#xff1b;2.设置用户别名和邮件群组&#xff1b;3.设置邮件大小、邮箱空间的限制。环境还是之前的&#xff0c;做之前可…

单片机断电后静态存储区里面还有数据吗_单片机启动流程和存储架构详解

最近在给公司的ADAS DCU做内存分配&#xff08;Memory Allocation&#xff09;&#xff0c;在这儿记录一下相关知识点&#xff0c;也算是给中文社区做贡献了。目录&#xff1a;1. ECU启动流程2. 存储空间解析3. TC397单片机的Memory Map和一些备注1. ECU启动流程图总比文字直观…

[WCF安全系列]认证与凭证:用户名/密码认证与Windows认证

如果要给认证下一个定义&#xff0c;我个人的倾向这样的定义&#xff1a;认证是确定被认证方的真实身份和他或她申明&#xff08;Claim&#xff09;的身份是否相符的行为。认证方需要被认证方提供相应的身份证明材料&#xff0c;以鉴定本身的身份是否与声称的身份相符。在计算机…