python调用class时no model_当跨包导入模块时,Python“ImportError:No module named”

本文介绍了在Python项目中遇到跨包导入模块时的'ImportError: No module named'错误的解决方法。通过分析Python的搜索路径,提出了解决方案,包括使用sys.path.insert()添加路径,以及对导入语句的调整。同时,提供了更多关于Python导入机制和路径管理的参考资料。
摘要由CSDN通过智能技术生成

短版

更改为:sys.path.insert(0, os.path.realpath('./'))

from text_analysis.text_refinement import camel_case_split

或者:

^{pr2}$

长版

我已经在我的机器上重新创建了你的项目结构,并设法使它工作。让我们一步一步来,这样我们就能弄清楚到底发生了什么。在

首先,我看到你在PyCharm做你的项目。它会自动将项目根添加到PYTHONPATH。您可以在这个thread中详细阅读。因为PyCharm为您处理路径业务,所以您并不真正需要sys.path.insert(0, os.path.realpath('../text_analysis'))

让你的代码运行。路径仍将被添加,但不会用于定位包。在你的机器上试试。我想你会发现这是真的。你可以很容易地通过运行来检查路径for path in sys.path:

print(path)

虽然这是一个有趣的信息,但它不能回答您的问题:如何从终端运行它。为了理解它为什么不从脚本中运行,让我们看看在执行方法1中的(稍作修改)命令时,您将拥有哪些Python路径:sys.path.insert(0, os.path.realpath('../text_analysis'))

try:

from text_analysis.text_refinement import camel_case_split

camel_case_split()

except:

for path in sys.path:

print(path)

# output:

# ~/text_analysis (where ../text_analysis path points to)

# ~/social-network-interest-engine/social_networks (where your file is)

# ... (several other irrelevant paths) ...

我们可以看到,'../text_analysis'指向一个目录,上面的是您需要的。如果我们删除其中一个句号,改为写'./text_analysis',会发生什么?输出似乎是我们需要的:# output:

# ~/social-network-interest-engine/text_analysis

# ~/social-network-interest-engine/social_networks

但是我们还没有导入函数。我们知道这一点是因为我们到达了except部分,它打印路径。看看import,我们可以看到text_analysis.text_refinement。如果已经将目录名添加到路径中,我们真的需要声明它吗?不,我们没有。如果我们写from text_refinement import camel_case_split

相反,我们发现函数终于被导入了。按照这个逻辑,假设我们想在import语句中保留text_analysis.text_refinement(无论出于什么原因),我们也可以用不同的方式添加路径:sys.path.insert(0, os.path.realpath('./'))

但是请注意,这种插入路径的方式有点脆弱。起始位置是您调用python python_file.py的路径。如果您导航到不同的目录,则需要相应地调整os.path.realpath。你可以做的是:sys.path.insert(0, 'full/path/to/application/app/folder')

尽管这假设项目的目录/结构不会改变。在

对于路径和导入的更深入的概述,您可以阅读有关从不同文件夹导入内容的更多信息here,如果您更喜欢相对路径导入,this是一个有用的线程。当然,official documentation也是一个很好的起点。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值