问题标签 [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.
python - 从外部目录运行包 - 导入问题
我有一个包裹:
__main__.py
文件__init__.py
为空。
我需要从指定路径运行 mypkg 例如:
当我以这种方式运行 mypkg 时,出现错误:
from mypkg import mod1
当我更改为from . import mod1
但 PEP8 建议绝对导入而不是相对导入时,这可以解决。
我发现的另一个解决方案是添加:
__init__.py
归档_
然后一切都很好。
所以问题是:更好的解决方案是什么?使用相对导入或操作 sys.path 以使包正常运行,或者可能存在此问题的另一种解决方案?
python - 为什么“尝试相对导入超出顶级包”ValueError,而不是 ImportError?
当我在顶级包之外进行相对导入时,我得到了一个例外——这并不奇怪。但为什么它是 aValueError
而不是 a ImportError
?
我本来期望ImportError
, 因为这个异常与导入包有关,并且通常给出ImportError
(或其子类ModuleNotFoundError
)。这里的理由是什么?
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__.py
exp
kaffe
sys.path
from .tensorflow.network_shape import Network_Shape
所有步骤后出现同样的错误。
所以我不了解相对导入的规则以及如何以理智的方式引用文件。我真的很感激一个指针,它可以帮助我理解如何做到这一点,以及如何考虑一般的此类导入!
python - 尝试从自定义应用程序导入模型时出现导入错误
我有一个 django 项目,我正在尝试将模型从我的应用程序网站导入到我的 App_2。
这或多或少是我的文件夹结构:
- 网站
- 网站
- 应用程序1
- 模型.py
- 视图.py ....
- 应用程序2
- 模型.py
- 视图.py ....
现在,在我的views.py(App2)中,我想从models.py(app1)导入一个方法。会出现以下问题:
- 尝试的时候
from app1 import models
ModuleNotFoundError:No module named 'website.app'
- 尝试“从 website.app1 导入模型”时
ValueError: attempted relative import beyond top-level package
- 尝试“从 ..app1 导入模型”时
ValueError: attempted relative import beyond top-level package
所以相对和绝对导入失败了......我觉得我忽略了一些东西。
任何帮助表示赞赏,谢谢。
python-3.x - 没有名为 xxxx 的模块。如何导入相对路径?
我创建了一个简化版本,只专注于获得工作的相对路径。这是我的文件结构:
我正在尝试将页面导入测试。但是,我收到 package1 不是模块的错误。下面我输入了我的代码中的所有内容。很简单。我只是想将页面导入测试。我是否缺少任何东西(文件或页面设置)阻止我导入?
页面.py
测试.py
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很有启发性,但也没有回答我的问题。
python - 在python中使用相对导入的值错误
我的项目中有以下文件结构:
在里面database_connection.py
我有sqlite连接connect
和close
连接。
问题是:在里面test.py
我曾尝试database_connection.py
使用以下代码导入函数:
from ..utils.database_connection import DatabaseConnection
但是当我尝试运行时,我遇到test.py
了以下问题:
如何正确导入函数?
python - 导入相对于当前脚本的模块(超出顶层)
我有一个a
包含多个版本的项目,main#.py
因此我将它们组织到一个名为run
. 我通常a
通过./a
调用来运行项目python run/main1.py
。因为main1.py
涉及到顶级包之外的导入,我需要sys.path.insert(0, "./")
在main1.py
.
现在我创建b
了main1.py
从a
. 从b\main.py
,我如何才能专门main1.py
导入a/utils.py
?
要求:
Project
a
是我很久以前从事的一个项目,所以我想对其标题进行有限的更改。我想像现在这样python run/main1.py
工作。我可能会在不同的计算机之间移动项目,因此
main1.py
需要utils.py
相对于自身导入。(即不使用绝对路径导入)我希望解决方案具有可扩展性。
b
将需要从其他几个项目中导入模块,例如a
. 我觉得扩展系统的 PATH 变量可能只会把事情搞砸。有没有更简洁的解决方案?
我的项目文件如下:
- 一个
- 跑
- main1.py
- 实用程序.py
- 跑
- b
- 主文件
- 实用程序.py
在a/run/main1.py
:
在a/utils.py
:
在b/main.py
:
在b/utils.py
:
这是目前的结果。我想第一行打印'hello from a':
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”,然后才意识到删除它是没有意义的。
python - Django 项目中应用程序范围的 utils 文件的位置
鉴于Python 中相对导入的噩梦,我应该将一个简单utils.py
文件放在具有多个应用程序的 Django 项目中的哪里(可在所有应用程序目录models.py
的所有文件中访问)admin.py
?views.py
2019 年似乎仍然没有一个好的答案,尽管 Django 是迄今为止最流行的语言框架。
考虑到 Python 2 将于 2020 年 1 月停止使用,请同时提供 Python 3 的答案。