IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 浅谈pycharm和终端下的ModuleNotFoundError -> 正文阅读

[开发工具]浅谈pycharm和终端下的ModuleNotFoundError

? ? ? ? 最近看到不少人都在询问,为啥pycharm下运行没问题,代码一放到终端下运行就报ModuleNotFoundError: No module named ‘****’ 错误。其实这是个很基础的设置问题,可能也是过于基础,很多人并没有那么关注,以致于出错时总是先责怪pycharm。下面我们就说简单梳理一下。


工作目录(working directory)

首先,这里先介绍一个概念。工作目录,所有计算机语言在运行时都会有一个本地磁盘工作主目录(工作空间),python也不例外。和大多数语言一样,代码的运行入口所在的py文件所属的目录被默认为项目的运行工作目录,在运行过程中,调用不同的代码模块或不同的包时,涉及路径问题,皆以工作主目录为基础。

具体的工作目录可以通过执行:os.getcwd()方法打印输出。

下面我们用一个简单的例子测试一下:

  1. 创建一个hello_dir的工程。
  2. 工程下分别创建package1,package2这两个包,并创建名为main.py的代码文件。
  3. package1包创建名为code1.py的代码文件,package2包下创建名为code2.py的代码文件。

项目结构如下:

code1.py的代码内容:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os

print("code1:",os.getcwd())

?code2.py的代码内容:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os

print("code2:",os.getcwd())

?main.py的代码内容:

from package1 import code1
from package2 import code2

pycharm上直接运行main.py文件(不要疑惑代码只有两个from import也能运行),打印结果如下:

和预期结果是一致的,两个不同的包目录下打印出来的当前工作目录都是相同的,都是运行入口代码main.py所有的目录:E:\codes\hello_dir。

下面我换种玩法,换一个运行入口。把code1.py代码修改为如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from package2 import code2  #导入code2可以在加载code2时运行里面的方法

print("code1:",os.getcwd())

pycharm上运行code1.py,结果如下:

从打印内容可以看到,当前工作主目录为E:\codes\hello_dir\package1,也就是说运行过程中调用到code2.py时,code2.py也是和code1.py一样在同一个主工作目录E:\codes\hello_dir\package1下运行的。

所以说,项目的工作目录决定于程序运行的入口代码文件所在的目录。

import模块或包

还是上面的代码,没做任何改变,换种运行方式,电脑上打开cmd,切换到目录E:\codes\hello_dir\package1,执行python code1.py,结果如下:

看到这结果是不是很意外,刚才在pycharm上运行明明没有异常的。?

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 14:19:02  更:2021-09-27 14:21:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:19:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码