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


前言

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


一、问题描述

导入自己写的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,这个路径直接添加在要运行的主文件里面就行了,不过亲测加在库文件里面也可以。

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值