Python导包问题解决大全

导包时出现如下错误

from test_project.test_case.test_battal import TestBattal
ModuleNotFoundError: No module named 'test_project'

说明python执行时找不到这个包文件,所以无法调用。那么我们需要先知道python是如何搜索的。
当一个名为 ***的模块被导入的时候,解释器首先寻找具有该名称的内置模块。如果没有找到,然后解释器从 sys.path 变量给出的目录列表里寻找名为 ***.py 的文件
可以使用[sys.path]打印出python找包的路径

import sys
print(sys.path)


解决办法一:
将文件的目录临时追加到搜索目录中,因为目录写死,只适合临时解决问题

#注意导包代码需要放在添加路径的代码后,否则依然无法找到包
import sys
import unittest
import os
sys.path.append(r'F:/教程/全栈测试开发课程/第26课时')
# dir_path1 = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# sys.path.append(dir_path1)
# print(dir_path1)
from test_project.test_case.test_battal import TestBattal
if __name__ == '__main__':
# 根据给定的测试类,获取其中所有以test开头的测试方法,并返回一个测试套件
suite1 = unittest.TestLoader().loadTestsFromTestCase(TestBattal)
# 将多个测试类加载到测试套件中
suite = unittest.TestSuite([suite1])
# 设置verbosity = 2,可以打印出更详细的执行信息
unittest.TextTestRunner(verbosity=2).run(suite)

解决办法二:
使用相对路径,临时添加到sys.path目录,包目录不依赖环境,随便更换环境都可执行。

#注意导包代码需要放在添加路径的代码后,否则依然无法找到包
dir_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.append(dir_path)


解决办法三:
直接写入到python系统路径,可以永久解决,但是路径也是写死的。
使用pth文件,在 site-packages 文件中创建 .pth文件,将模块的路径写进去,一行一个路径,以下是一个示例,pth文件也可以使用注释:

# write to apckage path
C:\Users\Administrator\Desktop\test_project
C:\Users\Administrator\Desktop


然后可以愉快的导包玩耍了。
解决办法四:
既然python是通过查找路径来找包,那么我们可以配置环境变量,让python去我们指定的路径去找,这样也是可以解决问题。
新建用户环境变量

设置名称和路径

其中,在“变量名”文本框内输入 PYTHONPATH,表明将要建立名为 PYTHONPATH 的环境变量;在“变量值”文本框内输入 .;d:\python_ module。注意,这里其实包含了两条路径(以分号 ;作为分隔符):
第一条路径为一个点(.),表示当前路径,当运行 Python 程序时,Python 将可以从当前路径加载模块;
第二条路径为 C:\Users\Acer\Desktop,当运行 Python 程序时,Python 将可以从 桌面 中加载模块。
然后点击“确定”,即成功设置 path 环境变量。此时,我们只需要将模块文件移动到和引入该模块的文件相同的目录,或者移动到 C:\Users\Acer\Desktop 路径下,该模块就能被成功加载。


__EOF__

本文作者Harry
本文链接https://www.cnblogs.com/harry66/p/14071388.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Harry_666  阅读(1553)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示