引言

今天遇到了一个奇怪的现象,简单举个栗子:

文件结构如下:

其中tt.py文件中定义了一个方法:

def tt():print('tt')

我现在要在test.py中使用tt(), 代码如下:

from test.tt import tt
​
if __name__ == '__main__':tt()

以上导入模块是编译器自动导入的,运行后直接报错:

说没有找到这个模块,然后我将导入换成相对路径

可以看到编译器是有报错提示的,但是运行完全没有问题。

将路径换成相对路径试试呢?

很好,编译器是认识的,但是不好意思运行报错

那么问题来了,问什么编译器的自动导包会出现问题呢?这编译器也太不智能了。

探究

众所周知,Python模块导入的查找路径可以通过sys.path查看,我看了一下:

['/home/hujing/workspace/python/python_demo/test', '/home/hujing/workspace/python/python_demo', '/usr/share/pycharm/helpers/pycharm_display', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/home/hujing/.local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages', '/usr/share/pycharm/helpers/pycharm_matplotlib_backend']

在第一个路径下找tt可以找到,这也是上面正确运行的,没有问题

在第二个路径下找test.tt,应该也可以找到啊,为什么会提示找不到呢?

相对路径查找为什么也找不到呢?在网上找了找,没有找到能够解决我问题的答案,那我就只好自己探究了。

尝试

首先,无法导入本包下的其他模块,尝试在其他模块中导入:

新建模块并导入刚才的test模块, 文件结构如下:

其中fun_test.py文件只有一句:import test.test

先尝试一下刚才运行的模式:

不出意外会报错,因为运行路径已经换到fun目录下了,果不其然

再尝试一下刚才编译器的做法:

正常:

相对路径经过尝试也是正常的。

思考

那我就奇怪了,为什么换个模块运行就可以。就不能正常导入自己包的模块吗?还是说python没有把运行路径当做包?

我觉得应该是后者,Python不会将执行的文件路径作为一个包来处理,在我经过一些其他的尝试之后,暂时看到的确实是这样。故而也就无法通过导入包的形式来导入了。

这只是我经过尝试,暂时得出的粗浅结论,目前还没有找到相关内容的说明,若哪位了解,还望不吝赐教。

项目路径

再有一个问题,Pycharm中运行正常,但是使用cmd直接运行就会报错,很简单,输出sys.path,可以看到两者的不同,Pycharm非常贴心的讲我们项目的运行根路径添加进去了,在命令行运行就需要手动添加了。当然,你也可以选择讲各种自己的包都放到系统路径下,或者直接在系统路径下添加项目路径。

Python导入运行的当前模块报错相关推荐

  1. 【Python】import自己的模块报错

    在实际使用python时,我们会将一些公共的东西写到一些基础模块中,供其他模块去调用,这时会去import自定义的一些基础模块,然后来导入. 自己写好了脚本,然后导入,导入的情况分为以下情况: 1. ...

  2. python中自定义模块导入飘红_Pychorm提示Unresolved reference 导入模块报错

    最近使用Pychorm编写Python时,每次要引入自定义模块,就会报错,提示"Unresolved reference" Unresolved reference 'LoginC ...

  3. Python导入模块报错问题的分析

    在Python代码中导入自定义模块时经常遇到报错问题,并且在PyCharm和命令行中会有不同的表现.本文通过实例分析两种常见的导入错误出现的原因及解决方法. Python版本:3.8 1.相对导入报错 ...

  4. 解决python导入当前文件夹下的包时可以运行,但编辑器报错

    比如导入当前文件夹下的config.py文件,使用: form ..config import xxx 其中..表示当前文件夹,在写代码时直接:from config import xx是不会报错的, ...

  5. VScode 导入自定义模块报错问题

    VScode 导入自定义模块报错问题 这个问题在vscode默认是从根目录下导入自定义模块,所以若模块未在根目录下存储就会报错. 个人尝试了修改文件内部的settings json内的"py ...

  6. python 运行画图时,报错:“RuntimeError: Invalid DISPLAY variable“

    python 运行画图时,报错:"RuntimeError: Invalid DISPLAY variable" 错误描述 错误原因 matplotlib的默认backend是Tk ...

  7. python3.7导入gevent模块报错的解决方案

    python3.7导入gevent模块报错的解决方案 参考文章: (1)python3.7导入gevent模块报错的解决方案 (2)http://www.cnblogs.com/eva-j/p/939 ...

  8. python psutil库安装_安装psutil模块报错安装python-devel

    psutil/_psutil_linux.c:9:20: 错误:Python.h:没有那个文件或目录 In file included from psutil/_psutil_linux.c:19: ...

  9. python class函数报错_Python multiprocess pool模块报错pickling error问题解决方法分析

    本文实例讲述了Python multiprocess pool模块报错pickling error问题解决方法.分享给大家供大家参考,具体如下: 问题 之前在调用class内的函数用multiproc ...

最新文章

  1. Java对象的生命周期与作用域的讨论(转)
  2. Facebook-Rebound探索发现
  3. 从概设流程、审美、设计思路几个方面,漫谈游戏美术设计的思维方式
  4. PHP curl采集
  5. 基于.NetCore3.1搭建项目系列 —— 使用Swagger做Api文档(上篇)
  6. 云南河道 kml文件_处理能力提升 4 倍 ,大疆智图 4 天完成 5 公里河道建模
  7. Codeforces Round #722 (Div. 2)
  8. 初中生学python教材推荐_推荐中学生看的几本书
  9. 监听返回app_基于 Redis 消息队列实现 Laravel 事件监听及底层源码探究
  10. java 判断数字_如何在java中判断一个字符串是否是数字
  11. idea swagger生成接口文档_Springboot结合swagger-ui自动生成接口文档
  12. 11-linux基础八-正则表达式
  13. 开发板与虚拟机tftp服务器安装与使用
  14. 2021年山东省安全员A证考试题及山东省安全员A证考试试卷
  15. 思科路由器及交换机基本配置
  16. Mac邮件客户端(Edison Mail)的功能特点
  17. 《企业大数据系统构建实战:技术、架构、实施与应用》一2.3 大数据制度和流程规范...
  18. QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之【05EC20模组TCP/IP模块AT指令说明】
  19. Arduino学习总结(未完待续)
  20. 初一计算机教学论文,初中信息技术论文范文

热门文章

  1. 学习笔记:区块链概念入门
  2. zlib数据格式及解压缩实现
  3. ECC椭圆曲线加密算法原理
  4. python中的array函数作用_Python中的Array | 数组2(简介和功能)
  5. oracle 增量设为3 循环_Oracle 差异性增量 和 累计增量 原理(转)
  6. 2008文件服务器迁移,Windows2008及早期服务器DHCP的数据迁移方法
  7. python设计模式免费_python 设计模式
  8. 【LeetCode笔记】143. 重排链表(Java、链表、栈、快慢指针)
  9. wp自定义帖子没标签_ofollow标签的作用有重大变化
  10. linux没有usr目录_了解linux系统目录,sys,tmp,usr,var!