问题标签 [relative-import]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
64 浏览

python - 从外部目录运行包 - 导入问题

我有一个包裹:

__main__.py

文件__init__.py为空。

我需要从指定路径运行 mypkg 例如:

当我以这种方式运行 mypkg 时,出现错误:

from mypkg import mod1当我更改为from . import mod1但 PEP8 建议绝对导入而不是相对导入时,这可以解决。

我发现的另一个解决方案是添加:

__init__.py归档_

然后一切都很好。

所以问题是:更好的解决方案是什么?使用相对导入或操作 sys.path 以使包正常运行,或者可能存在此问题的另一种解决方案?

0 投票
0 回答
105 浏览

python - 为什么“尝试相对导入超出顶级包”ValueError,而不是 ImportError?

当我在顶级包之外进行相对导入时,我得到了一个例外——这并不奇怪。但为什么它是 aValueError而不是 a ImportError

我本来期望ImportError, 因为这个异常与导入包有关,并且通常给出ImportError(或其子类ModuleNotFoundError)。这里的理由是什么?

0 投票
1 回答
81 浏览

python - python 2.7 包中的多个相对导入

我知道有很多关于相对进口的问题。我将记录我在其中尝试解决方案的程度,但我仍然无法解决我的问题。

我有以下目录结构。这不是我的设计,但我喜欢根据需要修改东西(分叉回购)。

要在这个 repo 中运行模型,我将使用

python main_Exp.py input_file.csv

内部main_Exp.py

内部ResNet/ThreeDMM_shape.py

好的,很明显我需要更改这个硬编码的绝对路径。我想以正确的方式进行操作,而不是使用我碰巧将这些文件安装到的特定路径。


所以我尝试

(1) 我在文件夹中 添加__init__.py了文件(用 (4) 鉴于第一次导入是使用附加到的路径进行的,我尝试将导入更改为ResNet(*)python -m main_Exp input_file.csv__init__.pyexpkaffesys.pathfrom .tensorflow.network_shape import Network_Shape

所有步骤后出现同样的错误。

所以我不了解相对导入的规则以及如何以理智的方式引用文件。我真的很感激一个指针,它可以帮助我理解如何做到这一点,以及如何考虑一般的此类导入!

0 投票
0 回答
57 浏览

python - 尝试从自定义应用程序导入模型时出现导入错误

我有一个 django 项目,我正在尝试将模型从我的应用程序网站导入到我的 App_2。

这或多或少是我的文件夹结构:

  • 网站
    • 网站
    • 应用程序1
      • 模型.py
      • 视图.py ....
    • 应用程序2
      • 模型.py
      • 视图.py ....

现在,在我的views.py(App2)中,我想从models.py(app1)导入一个方法。会出现以下问题:

  1. 尝试的时候from app1 import models

ModuleNotFoundError:No module named 'website.app'

  1. 尝试“从 website.app1 导入模型”时

ValueError: attempted relative import beyond top-level package

  1. 尝试“从 ..app1 导入模型”时

ValueError: attempted relative import beyond top-level package

所以相对和绝对导入失败了......我觉得我忽略了一些东西。

任何帮助表示赞赏,谢谢。

0 投票
2 回答
116 浏览

python-3.x - 没有名为 xxxx 的模块。如何导入相对路径?

我创建了一个简化版本,只专注于获得工作的相对路径。这是我的文件结构:

我正在尝试将页面导入测试。但是,我收到 package1 不是模块的错误。下面我输入了我的代码中的所有内容。很简单。我只是想将页面导入测试。我是否缺少任何东西(文件或页面设置)阻止我导入?

页面.py


测试.py


0 投票
1 回答
935 浏览

python - 'from dot import asterisk' 在 Python 3 中有什么作用?

问题

以下行在 Python 3 中做了什么?

到目前为止我发现的...

它不输出任何东西,我在 Python 3.7.3 中看到的唯一变化如下:

这可能是警告模块的一部分,表示某处存在未打印的警告,但文档仅提及 __warningregistry__模块中的一个变量warnings

该文档解释了如何from . import foo 工作以及如何from bar import * 工作,但我找不到任何关于from . import *. 有人可能期望 from 的所有名称__init__.py都加载到当前名称空间中(就像from bla import *for一样bla.py),但这似乎不是这种情况,而且在__name__ == '__main__'(脚本和终端)时也没有任何意义。

Python 2 的行为与我的预期更相似:

PEP 328很有启发性,但也没有回答我的问题。

0 投票
0 回答
58 浏览

python - 在python中使用相对导入的值错误

我的项目中有以下文件结构:

在里面database_connection.py我有sqlite连接connectclose连接。

问题是:在里面test.py我曾尝试database_connection.py使用以下代码导入函数: from ..utils.database_connection import DatabaseConnection 但是当我尝试运行时,我遇到test.py了以下问题:

如何正确导入函数?

0 投票
0 回答
58 浏览

python - 导入相对于当前脚本的模块(超出顶层)

我有一个a包含多个版本的项目,main#.py因此我将它们组织到一个名为run. 我通常a通过./a调用来运行项目python run/main1.py。因为main1.py涉及到顶级包之外的导入,我需要sys.path.insert(0, "./")main1.py.

现在我创建bmain1.pya. 从b\main.py,我如何才能专门main1.py导入a/utils.py

要求:

  1. Projecta是我很久以前从事的一个项目,所以我想对其标题进行有限的更改。我想像现在这样python run/main1.py工作。

  2. 我可能会在不同的计算机之间移动项目,因此main1.py需要utils.py相对于自身导入。(即不使用绝对路径导入)

  3. 我希望解决方案具有可扩展性。b将需要从其他几个项目中导入模块,例如a. 我觉得扩展系统的 PATH 变量可能只会把事情搞砸。有没有更简洁的解决方案?

我的项目文件如下:

  • 一个
      • main1.py
    • 实用程序.py
  • b
    • 主文件
    • 实用程序.py

a/run/main1.py

a/utils.py

b/main.py

b/utils.py

这是目前的结果。我想第一行打印'hello from a':

0 投票
2 回答
122 浏览

python - 从python中的同级文件夹导入函数会产生奇怪的错误

我有一个正在运行的脚本“zigbot.py”,但我正在重组为 dockerize,现在我完全质疑我的编码能力。我想要做的是有一个电报机器人容器、一个“网络”容器(FLASK)和一个 nginx 容器。

在 zigbot.py 旁边,我有一个文件夹 - 'bot',其中包含我的许多脚本和功能。在尝试from bot.somescript import a_function时,我遇到一个又一个错误。

项目结构

运行下面的代码时,我得到了一系列奇怪的错误——下面列出的一个显示 ImportError——它在 funcs 中找不到“onboard”,但它肯定存在。在重组之前,这是有效的。如果我注释掉“板载”,则列表中的每个函数都会出错。

所以我尝试为(相对?)导入添加一个 .bot.conversation ,但这会产生一个更奇怪的错误。我已经包含了代码、错误,然后是我尝试在下面导入的函数:

对话.py

最后,我认为我越来越接近问题,我回到我认为应该导入的方式。From bot.funcs import x,y,y... 我在 funcs.py 中查看,这就是它从我的 Flask Web 应用程序中导入一些其他代码的方式,但它不喜欢它。

函数.py

因此,我将导入更改为上一级,因为 web 高于两个级别bot- 其中包含我要导入的脚本。所以zigbot>bot>bot>funcs.py尝试从zigbot>web>app>

这显然也不起作用。鉴于我的结构bot以及web如何使其发挥作用?我什至尝试将脚本从第二个“bot”文件夹中拉出,但我遇到了同样的问题。最后,我最奇怪的错误可能会为我做错了什么提供线索,如果我将 funcs.py 上的导入更改为上一级而不是两级,我会得到一个更奇怪的回溯。

为了清楚起见,我从回溯中删除了一些“C:\Users\phill”,然后才意识到删除它是没有意义的。

0 投票
1 回答
1021 浏览

python - Django 项目中应用程序范围的 utils 文件的位置

鉴于Python 中相对导入的噩梦,我应该将一个简单utils.py文件放在具有多个应用程序的 Django 项目中的哪里(可在所有应用程序目录models.py的所有文件中访问)admin.pyviews.py

2019 年似乎仍然没有一个好的答案,尽管 Django 是迄今为止最流行的语言框架。

考虑到 Python 2 将于 2020 年 1 月停止使用,请同时提供 Python 3 的答案。