关于Python3的import问题(pycharm可以运行命令行import错误)

 更新时间:2020年11月18日 09:41  点击:2038

以前从来没有写过特别多的代码,这次在阅读论文的时候跑别人的代码的时候出现了很多import的问题,这里我想跟大家分享一下,我在Ubuntu系统,使用的是anaconda3,版本为3.6,我一般会在pycharm上跑代码,但是有时候pycharm上跑通的代码,在命令行下总出现import的问题,所以这里来总结一下,我就举个简单的例子吧!

一、同一目录下的import

下面是我的文档的结构:你可以看到在工程tfexe下,存在两个文件夹一个是datasets,一个是parallel,dataset下还有一个in文件夹和一个out.py文件,in文件夹里面存在b.py和bb.py两个文件。parallel文件夹下存在的是两个文件a.py和aa.py。(推荐您先建立好这个结构)

a.py文件代码:

def say_hello():
  print("hello world!")

aa.py文件代码:你可以看到是调用a.py里面的函数say_hello(),但是在pycharm这里是报错的,但是可运行,你可以设置将文件夹设置成source root就可以让他不显示错误了,但是无所谓啦!

import os
import sys
print("当前的工作目录:",os.getcwd())
print("python搜索模块的路径集合:",sys.path)
from a import say_hello
say_hello()

其他暂且无用,这里先不展示!

(1)pycharm运行结果

右击aa.py,来运行,你会观察到下面的结果:很显然,我们的a.py成功的调用了aa.py文件的函数say_hello()。

你可以看到当前的工作目录是什么,那就是aa.py文件所在的绝对地址。

关注重点,你可以看到Python搜索模块的路径集合,重点是前两个,你看到在pycharm上直接run运行的,我们的搜索路径有总的工程的绝对路径还有运行的文件所在的路径。

(2)命令行运行结果

需要你切换到parallel的文件夹下,然后运行aa.py,观察可得这个结果也是正确的。

你看出与上面的区别了吗?很显然,当前的工作路径全部都是一样的,但是我们的Python的搜索模块的路径少了什么呀?观察第二个,你会发现,哇哦,少了我的整个工程所在的绝对路径。因为这里parallel的绝对路径是存在的,所以在搜索a模块的时候,发现是可以搜索到的,因为a就在parallel这个绝对路径的下面,当然是可以搜索到的,但是如果你需要调用别的文件夹的东西呢?很显然,这里就要出错啦~详见下一节

总结:import同一文件夹下的模块是可以在pycharm还有命令行下都是可以运行的!

二、不同的目录下的import

b.py文件的内容:

def say_goodbye():
  print("goodbye!")

bb.py文件的内容:

import os
import sys
print("当前的工作目录:",os.getcwd())
print("python搜索模块的路径集合",sys.path)
#引入同一文件夹下的模块
from b import say_goodbye
say_goodbye()

# #引入与本文件夹同级的文件夹
# from in2 import c
# c.say()

#引入与本文件夹的上级文件夹同一级的文件夹下的模块
from parallel import a
a.say_hello()

c.py的文件内容:

def say():
  print("say yes")

(1)pycharm运行结果

你会发现,在pycharm上import不同文件夹下的模块居然成功了,这是为什么呢?你看Python的搜索模块的路径出来的结果,里面包含了,我这个总的工程tfexe的绝对路径,所以在引入parallel的时候自然是成功的,因为parallel在我们的搜索路径上。所以我推测啊,pycharm自动的将整个工程的绝对路径加入sys.path,也就是Python的模块搜索路径!

但是你肯定看到了我注释掉了那个进入in2模块的,为什么注释掉,因为跑不通啊,为什么跑不通呢?因为in2模块,没有搜到,很尴尬呀~那没搜到肯定是因为我的Python的搜索路径不包含这里,仔细观察结果,你发现只有tfexe的绝对路径和in的绝对路径,in2确实不在,怎么处理,把它加上绝对路径不就好了!

加上能够搜索到in2的绝对路径:那不就是datasets的绝对路径嘛!

在上面的bb.py里面添加上代码

#-----这里是加上in2的绝对路径的操作代码------
sys.path.append("/home/syq/PycharmProjects/tfexe/datasets")

从运行结果来看,你会发现居然都成功了,这都归功于sys.path!

(2)命令行运行结果

很显然啊,这里报错了,为什么呢?他说模块parallel不存在,为什么明明之前的在pycharm上可以运行在这里不行了呢?

我们在命令行运行注释掉in2的那个部分的代码,也就是(1)里面的未更改之前的bb.py的代码:为了防止大家搞混,我在这里在贴一下bb.py的代码:

import os
import sys
print("当前的工作目录:",os.getcwd())
print("python搜索模块的路径集合",sys.path)
#引入同一文件夹下的模块
from b import say_goodbye
say_goodbye()

# #引入与本文件夹同级的文件夹
# from in2 import c
# c.say()

#引入与本文件夹的上级文件夹同一级的文件夹下的模块
from parallel import a
a.say_hello()

结果:观察到报错了,报错parallel这个模块居然不存在,很显然观察sys.path的输出,你发现少了之前的tfexe的绝对路径,这就是parallel找不到的原因,因为他压根不在搜索路径上,所以这里我在bb.py的代码基础上添加上能够搜到parallel的搜索路径。

修改后的bb.py的代码:

import os
import sys
print("当前的工作目录:",os.getcwd())
sys.path.append("/home/syq/PycharmProjects/tfexe")
print("python搜索模块的路径集合",sys.path)

#引入同一文件夹下的模块
from b import say_goodbye
say_goodbye()

# #引入与本文件夹同级的文件夹
# from in2 import c
# c.say()

#引入与本文件夹的上级文件夹同一级的文件夹下的模块
from parallel import a
a.say_hello()

代码运行结果:注意我把未改之前的bb.py的运行结果也放在了这里,你可以观察到两者的差别所在,你就会发现,哦原来啊,下面的sys.path比更改之前的path多了一个可以搜索到parallel的绝对路径了,很显然就能成功的运行了!

现在你差不多懂了吧,当你遇到了import的错误,你只需要输出sys.path来看看能不能搜索到你要加入的模块,如果不行就自己手动的添加!

在引入in2模块试试看!

bb.py文件的内容:

import os
import sys
print("当前的工作目录:",os.getcwd())
sys.path.append("/home/syq/PycharmProjects/tfexe")
sys.path.append("/home/syq/PycharmProjects/tfexe/datasets")
print("python搜索模块的路径集合",sys.path)

#引入同一文件夹下的模块
from b import say_goodbye
say_goodbye()

#引入与本文件夹同级的文件夹
from in2 import c
c.say()

#引入与本文件夹的上级文件夹同一级的文件夹下的模块
from parallel import a
a.say_hello()

不管是在命令行还是pycharm都是可以得到结果的!

到此这篇关于关于Python3的import问题(pycharm可以运行命令行import错误)的文章就介绍到这了,更多相关Python3 import出错内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • Python3 实现将bytes图片转jpg格式

    这篇文章主要介绍了Python3 实现将bytes图片转jpg格式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-08
  • Python3中小括号()、中括号[]、花括号{}的区别详解

    这篇文章主要介绍了Python3中小括号()、中括号[]、花括号{}的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-15
  • 解决vue的router组件component在import时不能使用变量问题

    这篇文章主要介绍了解决vue的router组件component在import时不能使用变量问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27
  • 解决vue动态路由异步加载import组件,加载不到module的问题

    这篇文章主要介绍了解决vue动态路由异步加载import组件,加载不到module的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27
  • Python3 常用数据标准化方法详解

    这篇文章主要介绍了Python3 常用数据标准化方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-24
  • Mybatis plus中使用in查询出错如何解决

    这篇文章主要介绍了Mybatis plus中使用in查询出错的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-06
  • python import 上级目录的导入

    这篇文章主要介绍了python import 上级目录的导入,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • 浅谈Python3中print函数的换行

    这篇文章主要介绍了浅谈Python3中print函数的换行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-05
  • python3 sqlite3限制条件查询的操作

    这篇文章主要介绍了python3 sqlite3限制条件查询的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-07
  • 解决python3安装pandas出错的问题

    这篇文章主要介绍了解决python3安装pandas出错的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-05-20
  • python3 循环读取excel文件并写入json操作

    这篇文章主要介绍了python3 循环读取excel文件并写入json操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-14
  • 详解vue-router的Import异步加载模块问题的解决方案

    这篇文章主要介绍了详解vue-router的Import异步加载模块问题的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-14
  • 解决python3 中的np.load编码问题

    这篇文章主要介绍了解决python3 中的np.load编码问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-27
  • python3 如何读取python2的npy文件

    这篇文章主要介绍了python3 读取python2的npy文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-27
  • pip已经安装好第三方库但pycharm中import时还是标红的解决方案

    这篇文章主要介绍了python中pip已经安装好第三方库但pycharm中import时还是标红的问题,本文给大家分享解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-10-09
  • 基于python3+OpenCV实现人脸和眼睛识别

    这篇文章主要为大家详细介绍了基于python3+OpenCV实现人脸和眼睛识别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-06
  • Python pip安装lxml出错的问题解决办法

    Python pip安装lxml出错怎么办?本文介绍了Python pip安装lxml出错的问题解决办法,非常实用,有兴趣的同学快来看看吧。 Python pip安装lxml出错的问题解决办法1. 在...2017-07-06
  • python3+openCV 获取图片中文本区域的最小外接矩形实例

    这篇文章主要介绍了python3+openCV 获取图片中文本区域的最小外接矩形实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-03
  • win10系统下python3安装及pip换源和使用教程

    这篇文章主要介绍了win10系统下python3安装及pip换源和使用教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-04-30
  • 新手学习Python2和Python3中print不同的用法

    在本篇文章里小编给大家分享的是关于Python2和Python3中print不同的用法,有兴趣的朋友们可以学习下。...2020-06-10