当前位置: 首页 > news >正文

import模块到另一个文件夹报错:ModuleNotFoundError: No module named xxx

1. 问题

打开项目文件夹my_code,将bb.py的函数或者类import到aa.py中,然后运行aa.py文件,可能会报错ModuleNotFoundError: No module named xxx

‪E:\Desktop\my_code
├── a
│   ├── train.sh
│   └── aa.py
└── b
    └── bb.py

2. 几种无效的办法

不知为何,采用下面几种相对路径的办法均不行?

还有说新建__init__.py。试了下,有它或没有它都可以成功导入?

尝试1(无效)

aa.py代码:

import sys
from pathlib import Path
# Path(__file__)获取aa.py所在的路径:‪E:\Desktop\my_code\a\aa.py
# Path(__file__).parent.parent获取aa.py父路径的父路径: E:\Desktop\my_code
project_root = Path(__file__).parent.parent
sys.path.append(str(project_root)) # 把E:\Desktop\my_code加入到当前目录中,便于import。

尝试2(无效)

aa.py代码:

import sys
sys.path.append(r'../../')

3. 解决思路

  1. 查看当前要运行py文件所在路径:print(os.os.getcwd())
  2. 查看当前系统目录中是否包含要导入包所在的路径:print(sys.path)
  3. 如果没有就将其导入进来sys.path.append(),相对路径或绝对路径都可以,前提是清楚当前所在的路径。

一种稳妥的解决办法:
aa.py代码中加入下面内容:

import sys
sys.path.append(r'‪E:\Desktop\my_code')

需要注意的是,采用这种绝对路径也可能报错(偶尔不灵,建议放在代码的第一、二行),提示没有该模块(我遇到过)。解决上述类似问题的本质是:1)搞清当前.py文件所在的路径;2)查询当前系统目录是否包含待导入包所在的路径。

例如:输入sys.path,看下面的路径中是否包含该路径,如果没有,则必须导入进去。这里显示已经包含E:\\Desktop\\test_bash,所以就没问题了。

In[6]: sys.path
Out[6]: 
['E:\\Desktop\\test_bash',
 'E:\\pycharm\\PyCharm Community Edition 2023.1.2\\plugins\\python-ce\\helpers\\pydev',
 'E:\\pycharm\\PyCharm Community Edition 2023.1.2\\plugins\\python-ce\\helpers\\third_party\\thriftpy',
 'E:\\pycharm\\PyCharm Community Edition 2023.1.2\\plugins\\python-ce\\helpers\\pydev',
 '../']

4. 关于采用脚本运行的一点思考

解决上面问题后,在用脚本运行时出现一个问题,下面两种方法可能只有一个能正常运行。有时候第一个可以运行,有时候第二个可以运行,整的有点懵。

train.sh文件:

#!/bin/bash
$python optim.py

方法1运行train.sh

$ cd ‪E:\Desktop\my_code\a
$ bash train.sh

方法2运行train.sh

$ cd ‪E:\Desktop\my_code
$ bash a\train.sh

解决办法

train.sh加入一行代码之后,上述两种方法均可以成功运行,train.sh文件:

#!/bin/bash
cd "$(dirname "$0")" || exit 1
$python aa.py

相关文章:

  • Geotools中获取Shapefile的属性表格字符集编码的一种方法
  • [ruby on rails]ActiveModel源码阅读(Validations)
  • SQL注入的分类靶场实践
  • 【大模型安全】大模型安全概述
  • 常见webshell工具的流量特征
  • 批量修改或设置 Word 标题、主题、标记、作者、总编辑时间等元数据
  • Leetcode 3474. Lexicographically Smallest Generated String
  • 掌握 findIndex、push 和 splice:打造微信小程序的灵活图片上传功能✨
  • windows环境执行composer install出错
  • mac上最好的Python开发环境之Anaconda+Pycharm
  • 关于高精度力扣66
  • HTTP 状态代码 501 502 问题
  • 深度学习神经网络分类原理
  • centOS 环境 安装redis方法
  • DeepSearchAcademic-基于舆情中文核心论文的deepsearch的个人项目
  • 常见的网络协议介绍
  • Linux中使用cpulimit 限制 cpu 占用率
  • windows 上删除 node_modules
  • Zookeeper 及 基于ZooKeeper实现的分布式锁
  • 设计模式说明
  • 双鸭山网站开发/百度竞价排名展示方式
  • 做网站用商标吗/外贸营销网站制作
  • 上海由多少家网站建设公司/seo关键词优化工具
  • 营销型 手机网站制作/站外推广渠道
  • 公司网站开发费用计入什么科目/品牌运营方案
  • 怎么做网站效果图/网页开发