在命令行下执行python文件出现找不到自定义模块的问题

要解决这个问题,首先要了解关于python搜索包的机制,在这篇博客里讲的很清楚。

这篇博客里提出的第一种解决办法中,我发现如果每个文件都要写入以下代码,这样有些麻烦。下面的代码目的是将项目根目录加入到sys.path模块中。

#########################################################
#将根目录加入sys.path中,解决命令行找不到包的问题
import sys
import os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
#########################################################

因此,我在每个目录下的__init__.py中加入上述代码,这样,在该目录下的py文件通过引入__init__.py之后,就不用在每个文件里写入上述代码了。

举个例子:
我在linux环境下执行python3 train.py时,出现了无法找到自定义模块的情况。train.py在DL这个目录下,那我就在DL目录新建了一个__init__.py文件,加入以上代码后,在train.py的头部from __init__ import *之后,在linux下再次python3 train.py之后就没有问题。

其原因很简单,在了解python搜索包机制之后,知道了python没有在IDE环境下时,是从要执行的.py文件开始向下搜索包。因此,init.py与要执行的.py文件在同个目录下,就可以搜索到__init__.py的所有内容了,也就可以把项目根目录加入到sys.path的模块路径里。

另外,我又搜了一下sys.path是什么,在这个链接(同样有讲到不同目录下py文件引入的问题)中找到了以下答案:python中import某个A模块时,首先会从python的内置模块中查找是否含有该模块的定义若未查询到会从sys.path对应的模块路径查询是否含有对应模块的定义,如果搜索完成依然没有对应A模块时则抛出import的异常。

看了这段话后就知道了,为什么把根目录加到sys.path模块里会有效。

总结的有点乱,不过也只是个记录,有时间再修改一下~

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!当您遇到 Python 不到模块问题时,您可以尝试以下几个步骤来解决: 1. 确认模块已经安装:首先,确保您已经正确地安装了需要的模块。您可以使用 pip 或者 conda 命令来安装模块。例如,如果您想要安装一个名为 `numpy` 的模块,可以在命令行中运行 `pip install numpy`(或者 `conda install numpy` 如果您使用的是 conda 环境)。请确保您在命令行执行命令时使用了正确的 Python 环境。 2. 检查模块名称拼写:确认您在代码中正确地拼写了模块的名称。Python 是区分大小写的,所以模块名称的大小写必须与安装的模块一致。 3. 检查模块路径:有时候,Python 可能无法到安装的模块的路径。您可以尝试添加模块所在的目录到 Python 的搜索路径中。可以通过在代码中使用 `sys.path.append("module_path")` 来添加自定义模块路径。 4. 确认环境变量:如果您在安装 Python 模块时使用了虚拟环境(例如 virtualenv 或 conda 环境),请确保您正在使用正确的环境。 5. 重新启动 Python 解释器:有时候,Python 在安装新模块后可能需要重新启动才能识别到新安装的模块。您可以尝试退出 Python 解释器,然后重新启动它,再次运行您的代码。 如果上述步骤都没有解决问题,可能会有其他原因导致模块不到。在这种情况下,提供更多详细的错误信息将有助于更好地理解问题的根本原因。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值