文章目录

  • 前言
  • 一、问题描述
  • 二、问题分析和解决方法

前言

最近在写毕设的代码,在导入一个自己写的库文件的时候出现了路径问题。因为之前写其他项目的时候遇到过这个问题,这次又遇到了,并且用了解决之前项目的方法来解决这次的问题,但是并没有成功并且出现了新的问题,所以记录一下这次的问题解决过程。


一、问题描述

导入自己写的python库文件的时候出现ModuleNotFoundError,有的时候上一次运行就可以,但是下一次运行就找不到库

二、问题分析和解决方法

我自己写的库文件都放在utils目录下,结构如下图:

此时我想在preprocess.py中导入common.py中的方法

from common import read_image, stopwords_list, clean_str_sst, get_text_data, add_unknown_words, get_W, word2vec

但是报路径错误,找不到我要的文件

ModuleNotFoundError: No module named 'common'

这个找不到库的问题我之前在写其他项目的时候出现过,之前出现这个问题是因为我在从另一台机器上复制项目文件夹到我自己的电脑上的时候把pycharm创建工作目录时自动生成的.idea文件夹也给复制过去了,这个时候用pycharm打开那个文件夹,大概率会出现一些路径问题。这是因为原本pycharm自动帮你处理好的配置也被复制过去了,而复制过去的那个项目虽然里面的目录结构,代码内容都一样,但是他的路径变了,所以在新目录下import当前目录下的一些库的时候他会找不到。

常见的解决方法有很多,如果pycharm里面出现这个错误的话可以直接通过将文件标记为source root来解决,不过这种方式比较暴力,并且在非IDE的环境下是没有用的,比如服务器环境下。

如果是在服务器上出现路径报错问题的话,一般是使用sys.path.append方法将要导入的库文件的目录路径加入到系统的环境变量里面,我个人的话比较推荐这种方式,比如我这边要将.utils加入我的搜索路径环境变量里面可以这样做:

import sys
sys.path.append('../utils')
from common import read_image, stopwords_list, clean_str_sst, get_text_data, add_unknown_words, get_W, word2vec

记住一定要在导入库之前将路径加到环境变量里面。

大多数情况这样就可以解决98%的问题了,但是我用了这招之后还是报错,此时我打印了我的path的环境变量

这里显示../utils已经被加入到环境变量里面去了。于是我又上stackoverflow上面找了一下解决方法,找到了下面的方法:

import sys
current_dir = os.path.dirname(__file__)
sys.path.append(current_dir)
from common import read_image, stopwords_list, clean_str_sst, get_text_data, add_unknown_words, get_W, word2vec

重新运行之后,就可以找到了。

但是因为这个问题屡次遇到并且在上一次遇到的时候被弄得很头疼于是我仔细研究了一下,发现这个依赖问题和pycharm的工作路径有关,因为我是在MyProject/predict.py中导入了上面的utils里面的模块,所以如果我运行predict.py这个文件那么当前的工作目录实际上就是MyProject/,我在MyProject/utils/preprocess.py里面直接添加上层路径实际上是找不到的,如果要添加的话应该是在环境变量里面添加./utils这个路径而不是../utils,这个路径直接添加在要运行的主文件里面就行了,不过亲测加在库文件里面也可以。

在python中经常出现无法导入自己写的库文件的问题相关推荐

  1. python读取matlab矩阵_matlab、python中矩阵的互相导入导出方式

    还有一种最流行的h5py.. 过几天更新 ------------在python中导出矩阵至matlab------------ 如果矩阵是mxn维的. 那么可以用 : np.savetxt('dev ...

  2. python中模块fitz无法导入成功的原因找到了

    python中模块fitz无法导入成功的原因找到了 python中模块fitz无法导入成功的原因: pip install fitz 成功后,import fitz 出错,模块fitz无法导入成功.其 ...

  3. python循环语句-python中的for循环语句怎么写

    python中的for循环语句怎么写? Python for 循环语句 Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串. for循环的语法格式如下: 1 2 for iter ...

  4. python中re模块怎么导入_python如何导入re模块

    正则表达式是一个特殊的字符序列,能方便的检查一个字符串是否与某种模式匹配.re模块使得python拥有全部的正则表达式功能. 正则表达式导入方法import re 在python中默认采用的是贪婪模式 ...

  5. python中包的循环导入_具有继承的包中的循环导入依赖项

    这是一个可怕的Python循环导入参数,但是,IMHO,您可以有一个优秀的设计,仍然需要循环引用.在 所以,试试这个方法: 在东西.py公司名称:class Thing(Base): def acti ...

  6. access 导入txt 找不到可安装的isam_由浅入深:Python 中如何实现自动导入缺失的库?...

    ? "Python猫" ,一个值得加星标的公众号 在写 Python 项目的时候,我们可能经常会遇到导入模块失败的错误:ImportError: No module named ' ...

  7. configure 查找依赖库_由浅入深:Python 中如何实现自动导入缺失的库?

    在写 Python 项目的时候,我们可能经常会遇到导入模块失败的错误:ImportError: No module named 'xxx' 或者 ModuleNotFoundError: No mod ...

  8. 由浅入深:Python 中如何实现自动导入缺失的库?

    在写 Python 项目的时候,我们可能经常会遇到导入模块失败的错误:ImportError: No module named 'xxx' 或者 ModuleNotFoundError: No mod ...

  9. python中外部模块不用导入可以直接使用吗_python引入导入自定义模块和外部文件...

    python引入导入自定义模块和外部文件:项目中想使用以前的代码,或者什么样的需求致使你需要导入外部的包. 如果是web 下,比如说django ,那么你新建一个app,把你需要导入的说用东东,都写到 ...

最新文章

  1. RESTFUL框架-网站即软件
  2. oracle数据库登录失败触发器,oracle数据库登录、DDL触发器的应用
  3. (Java集合框架)集合框架概述和Collection常用功能及遍历
  4. 面向对象——多态,抽象类,接口(二)
  5. rust蓝卡怎么开_Rust娘个人资料简介,角色作品介绍
  6. LeetCode 5356. 矩阵中的幸运数
  7. 机器学习——支持向量机(SVM)
  8. python中数据存入execle、读取excel数据
  9. 听力测试英语软件初中,初中生英语听力软件
  10. android将手机能当蓝牙耳机使用吗,如何使Android手机成为蓝牙耳机?
  11. 分享两个超好用的在线制图工具
  12. cesium天气(晴、雨、雪、雾)
  13. 利用ELK分析Nginx日志生产实战(高清多图)
  14. 数字媒体技术专业方向
  15. HTML5学习之路(电影影评网)
  16. 如何低成本化实时网络摄像头监控直播?
  17. 内部排序(五)快速排序(上)- 概述与选择枢轴
  18. mysql reorg_生产数据库性能优化之reorg和表重建
  19. 数据分析的指南针--数据分析方法论(结合案例)
  20. mathematica--求偏导

热门文章

  1. 3月成为Python爬虫工程师课程
  2. lkt芯片接口调试建议-iic接口
  3. python输出结果空格分割_使用Python分割ps的输出
  4. 判断web访问是内网或是外网
  5. MATLAB 批量读取NC文件并转为TIF文件
  6. 《面试八股文》之Dubbo17卷
  7. Feign远程调用的问题
  8. 微信公众号开发之接口信息配置
  9. 出现字迹模糊迹象_发现麻烦的迹象
  10. php 把时间转为时间戳_php怎么把时间格式转换为时间戳?