以前从来没有写过特别多的代码,这次在阅读论文的时候跑别人的代码的时候出现了很多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出错内容请搜索云海天教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持云海天教程!

原文链接:https://blog.csdn.net/m0_37393514/article/details/81974957

python3命令需要使用命令行开发者工具_关于Python3的import问题(pycharm可以运行命令行import错误)...相关推荐

  1. vscode 切换开发者工具_大整理!JavaScript开发者的27个神奇VSCode工具

    全文共5630字,预计学习时长11分钟 图片来源:Ali Zolghadr/Unsplash Visual Studio Code(也被称为VSCode,https://code.visualstud ...

  2. 历史 微信开发者工具_不用微信开发者工具也能调试微信页面

    一般调试微信页面的时候,我们都会按照微信开发的官网教程,让你去安装微信开发者工具,然后在微信开发者工具上调试, 这样有时候会不会感觉很麻烦? 而且这个工具还经常卡死. 1515737321133.jp ...

  3. chrome开发者工具_如何使用Chrome开发者工具查找性能瓶颈

    chrome开发者工具 介绍 (Introduction) As one advances through a software development career, concerns beyond ...

  4. 历史 微信开发者工具_微信开发者工具PC版-微信开发者工具下载v1.03.2010240-IE浏览器中文网站...

    微信自成一个生态,微信开发者工具让用户能够自行设计自己的小程序界面.添加各种需要的功能,软件相对比较容易上手,可以与公众号对接,提升流量. 功能介绍 菜单栏 微信web开发者工具 切换帐号:快速切换登 ...

  5. 火狐开发者工具_性能审核:Firefox开发人员工具深入研究

    火狐开发者工具 In this article, we'll cover Firefox Web Developer Tools ("DevTools") - a set of t ...

  6. python3命令需要使用命令行开发者工具_3 个 Python 命令行工具

    用 Click.Docopt 和 Fire 库写你自己的命令行应用. 有时对于某项工作来说一个命令行工具就足以胜任.命令行工具是一种从你的 shell 或者终端之类的地方交互或运行的程序.Git 和 ...

  7. ubuntu测试键盘工具_强势霸榜GitHub,微软最强命令行工具发布引爆技术圈

    "卧槽"."牛*!"."想买PC!"是昨天凌晨微软Build大会发布Windows Terminal后开发者们的第一反应. 如旋风般登顶Gi ...

  8. 使用mysql命令行的工具_[MySQL]命令行工具和基本操作

    一 MySQL命令行工具  (查看帮助 ---help,或 -?) 1)MySQL MySQL是一个简单的SQL外壳(有GNUreadline功能).它支持交互式和非交互式使用.当交互使用时,查询结果 ...

  9. linux命令行ps1变量_利用Shell中变量PS1定制Linux Shell命令主提示符

    vim .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bas ...

最新文章

  1. Code Reading -chap4
  2. 思科网络基础配置命令大全(二)
  3. osgi学习之---扩展点理解
  4. 2013-9 OWASP论坛
  5. Android4.4 ContentResolver查询图片无效 及 图库删除 添加图片后,ContentResolver不更新的问题解决...
  6. 为mysql数据库建立索引
  7. 刚入门的UI设计师,需要懂的图标设计规范?
  8. C# WPF 利用NPOI读写Excel文件
  9. 《Effective C#》Item 20:区分接口实现与虚函数重载
  10. Pygame下载和安装
  11. 自己电脑配置Oracle WebLogic Server
  12. java读取ini文件工具_Java读取ini文件 [org.dtools.javaini]
  13. 网络芯片比较:DP83848、DM9000、enc28j60、RLD8019、w5100
  14. iPhone再添新配色: 黄铜色?
  15. 计算机文化基础第一章知识点题,计算机文化基础第一章习题与答案
  16. Kotlin学习(二十): Kotlin实现流的读取的方案
  17. *SAS语言结构**
  18. 利用ggplot2绘制功能富集气泡图
  19. “速课小龙”项目冲刺4
  20. GOG Galaxy连接Ubisoft Connect或者UPlay失败解决方法

热门文章

  1. 使用Chrome开发者工具研究JavaScript函数的原生实现原理
  2. 用Groovy读取本地文件的代码
  3. SAP CRM呼叫中心polling and C4C notification polling
  4. ABAP方法的exporting类型参数,需要在方法实现最开始显式初始化么
  5. 在SAP云平台的API portal里创建和管理API
  6. 那些年伴我一起成长的SAP装备
  7. SAP CRM IPC and configuration page debugs
  8. Cloud for Customer work center的数据是如何从ABAP Netweaver返回给前端的
  9. IBASE logical view和physical view
  10. 前端开发神器Sublime里如何设置JSlint