当前位置: 首页 > 面试题库 >

同一包中的绝对导入模块

端木乐语
2023-03-14
问题内容

我已经将导入问题简化为这个简单的基本案例。说我有一个Python包:

mypkg/
   __init__.py
   a.py
   b.py

a.py包含:

def echo(msg):
    return msg

b.py包含:

from mypkg import a       # possibility 1, doesn't work
#import a                 # possibility 2, works
#from mypkg.a import echo  # import also fails

print(a.echo())

在Python 2.7.6和Python 3.3.5上都可以运行python b.py产生ImportError: No module named mypkg。我也尝试过from __future__ import absolute_import在两种情况下添加相同的问题。

预期:

我希望可能性1可以正常工作。

我为什么要这样做:

可能性2不太理想。假设地,标准库可能会引入一个名为的包a(在这种情况下不太可能,但您可以理解)。当Python
2首先搜索当前软件包时,Python
3+包含绝对导入更改,因此将首先检查标准库。不管我出于什么原因,可能性1都应该起作用,不是吗?我可以发誓我已经做过数千遍了。

注意:如果您在外部编写脚本mypkg,则from mypkg import a可以正常使用。

我的问题类似于python-
在同一目录中模块的绝对导入,但是作者暗示我应该使用的工作。


问题答案:

from mypkg import a是正确的形式。不要在Python软件包目录中运行脚本,它会使用多个名称使同一模块可用,这可能会导致错误。python -m mypkg.b从包含的目录中运行mypkg

为了能够从任何目录运行,mypkg应该位于pythonpath中。



 类似资料:
  • 问题内容: 我想知道在Python应用程序中导入包的首选方法。我有一个这样的包结构: project.app1.views进口project.app1.models和project.app2.models。我想到有两种方法可以做到这一点。 绝对进口: 或具有明确的相对导入,如在Python 2.5中使用PEP 328引入的那样: 什么是最pythonic的方式做到这一点? 问题答案: 绝对进口。从

  • 问题内容: 我似乎无法让绝对导入在python中工作。这是我的文件结构: foo.py: 我反而得到: 这到底是怎么回事?我觉得我缺少基本的东西。尽管这个例子很简单,但我需要绝对导入才能为实际项目工作,因此仅用相对导入替换导入是不可行的。我正在使用python 2.7.13 预先感谢您的任何见解! 问题答案: 由于未显示,因此我必须假设您正在运行,这会将脚本()的目录放在开始的位置,而实际上您希望

  • 我似乎无法让绝对导入在python中工作。以下是我的文件结构: 福。py: 我反而得到: 这到底是怎么回事?我觉得我错过了一些基本的东西。虽然这个例子很简单,但我需要绝对导入来为实际项目工作,因此仅用相对导入替换导入是不可取的。我正在使用python 2.7。13 这里列出的解决方案都没有帮助 提前感谢您的任何见解!

  • 问题内容: 在Python中使用相对导入有一个缺点,您将无法再独立运行模块,因为您将得到一个异常: 为了能够执行以下所有操作,我应该如何修改示例代码:和 我正在寻找适用于python 2.6+(包括3.x)的解决方案。 问题答案: 首先,我假设您意识到您编写的内容将导致循环导入问题,因为foo导入bar反之亦然;尝试添加 to test.py,您将看到它失败。必须更改示例才能正常工作。 因此,您要

  • 问题内容: 这是一个python新手问题: 我有以下目录结构: 其中,和是文件夹。两者和处于同一级别。 module.py有一个名为的类,我想在test_file.py中实例化它的一个实例。我该怎么办? 我试过了: 但是我得到了: 问题答案: 您想要的是相对导入,例如: 问题在于,如果您将test_file.py作为主模块调用,它将无法正常工作。如前所述这里: 请注意,显式和隐式相对导入均基于当前

  • 根据这个答案,您可以使用来使用类似这样的相对导入: 为什么相对导入不适用于sklearn。特征提取。文本 我验证了是一个具有以下功能的模块: 编辑 “不工作”,我的意思是它不导入模块。 我正在使用Python 3.4 绝对方式工作: 相对方式不:

  • 我正在写一个应用程序使用Node.js.具体来说,我使用节点v10.3.0。此应用程序位于位于。此应用程序有一个package.json文件位于。这个应用程序引用了一个在中定义的类。需要注意的是表示自己的包。这个包是在中定义的。index.js代码如下: 当我尝试运行此操作时,会出现以下错误: 我的进口声明有什么问题?在我看来这是正确的。我是不是误解了什么? 项目js 谢谢

  • 我读了无数关于python中相对导入的讨论,我认为它如此令人困惑的原因之一是它在一个python版本之间发生了变化(我的版本是3.6)。但这里的罪魁祸首似乎是PyCharm(除非我弄错了..)我想知道是否有人找到了解决这个问题的办法。对于具有此布局的项目: 假设aa.py在文件中包含一些fuction,如果我编写这个导入: 因此,为了让PyCharm高兴,我可以将添加到导入中,然后错误似乎就解决了