问题标签 [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 - 定位“顶级包之外的尝试相对导入”的最佳实践
我想"attempted relative import beyond top-level package"
通过在导入中包含异常处理来缩小常见错误的范围。
在我的 Django 测试中,DjangoProject/tests.py
我编写了相对于自身 ( tests.py
) 的导入。执行每个测试文件的默认值unittests.py
位于根文件夹中,该文件夹还包括 DjangoProject 文件夹。
attempted relative import beyond top-level package
当我将它添加
到我的单元测试时,我得到了错误DjangoProject/tests.py
,很明显它来自进口。使用 try/except 我可以写出一个更清晰的错误,所以我不需要猜测为什么以及哪个文件导致了错误。
现在我的代码如下所示:
它首先抛出了所有信息:
这很有意义并且很有帮助,就像viewsfunctions
里面的模块一样DjangoProject
。我将这一行替换为:from DjangoProject.viewsfunctions import *
下一个错误是:
这正是我的问题。这可以是任何东西。通过 pdbing,我可以将其追踪到from .. import PoM
(因为模块PoM
相对于tests.py
顶层文件夹,但相对于unittests.py
同一文件夹中的执行)
在这种只有少量导入的情况下,缩小范围相对较快,但是有没有办法编写更好的异常消息或以某种方式传递更多信息,错误实际发生在哪些导入行中?
python - 如何在包内导入模块
文件夹结构:
foo/__init__.py
有import bar
我正在test.py
跑步import foo
我如何__init__.py
导入bar.py
?
为什么 Python 不为我的包创建新范围并为导入目录创建根foo
目录?
相对路径似乎也不起作用(我收到了SyntaxError
),尽管我正在寻找一种允许绝对路径的解决方案。
两个不可接受的答案:
我不能用
import foo.bar
。我需要这个foo
包有自己独立的层/范围,这样我就可以在我的计算机中的任何地方移动它并从任何地方导入它。这意味着根可能会改变并且import foo.bar
不会总是有效。我无法将
foo
文件夹添加到我的路径中。显然,这会使路径变得混乱,并且很容易发生名称冲突。开始的感觉会说这个包的文件应该与使用它的路径分开。
也许有一个解决方案可以将此包的目录添加到仅针对该包范围的路径中,在__init__.py
?
python-3.x - Python 3.7 单元测试
所以我尝试了很多东西(来自SO 和更多)让我的测试运行但没有任何效果这是我当前的代码:
test.py
我调用它来运行测试:python3 ./src/preprocess/python/test.py
import unittest
测试文件如下所示:
但输出总是这样:
附加信息:
- 如您所见,我不是从我的根目录中调用它。test 文件夹在里面
./src/preprocess/python/test/
,里面有一个__init__.py
文件(在 test.py 级别上还有一个 init 文件) - 如果我必须编写所有测试的所有调用,我只想完成这个,这对我来说没问题
- 使用 -t 的自动搜索也不起作用,所以我认为使用 test.py 的更强大的方法会起作用......
- 使用这个框架是我必须遵循的要求
- test_preprocessing.py 位于 test 文件夹中,
from scrapes.pdf import full_path_to_destination_txt_file
scrapes 是与 test 处于同一级别的模块文件夹 - 当我直接在命令行中调用单个单元测试时,由于相对导入而失败。但是使用 test.py (显然)可以找到模块。
怎么了?
python - Jupyter Notebook 中的 Python 相对导入
假设我有以下结构:
在, 中code.ipynb
,我只是想访问里面的一个函数functions.py
并尝试了这个:
我得到错误:
我检查了一堆类似的帖子,但还没有弄清楚……我正在从 a 运行 jupyter notebook,conda env
而我的 python 版本是3.7.6
.
python - Python 3:嵌套相对导入的问题(直接和间接执行代码)
我有以下项目结构:
示例代码 main.py
示例代码 lib/bar.py
示例代码 lib/foo.py
现在的问题:如果我执行 main.py 一切正常。如果我执行 foo.py 我得到以下 python 错误:
ImportError:尝试在没有已知父包的情况下进行相对导入
我在这个线程上发现了一个类似的问题,到目前为止,这条评论解决了我的问题:https ://stackoverflow.com/a/45556023/4428711
到目前为止foo.py 的解决方案:
现在我的问题是:对于嵌套相对导入,是否有比直接和间接执行更好的解决方案?
python - 要导入,目录是否必须在 sys.path 中?
我有我设计的这个包,它具有以下结构,
里面有module_A
一个函数打印一个字符串。
里面有module_1
,
然后我创建一个单独的 python 文件First.py
,它只有import General.Vector.module_1
.
我把这个文件放到General的父目录中,然后将cmd定位到父目录并运行python First.py
然后我得到错误ValueError: attempted relative import beyond top-level package
但如果我module_1
改为
然后这行得通。
我搜索了一个解决方案,从这篇文章中,我对相对导入有了很好的了解。然后有人向我指出,如果我添加我的包,sys.path
那么python First.py
无论First.py
它位于何处,都可以工作。
sys.path
所以我试着按照这篇文章的建议添加我的包。
我改变了First.py
我
但这没有用。
1我想知道module_1
's 变化的这两种不同行为的原因。
2我想知道如何将我的包裹添加到sys.path
.
pytest - 为什么相同的代码在一个文件中导入一个函数,而在不同的文件中导入同名模块?
同一个import语句from mypackage._aux import is_error
在类似的文件中有两种不同的含义:
在
_aux/foobar/_foobar.py
其中is_error
从_aux/is_error/_is_error.py
.但是在
_aux/abbrev_testing/_abbrev_testing.py
其中导入了整个模块_aux/is_error
。
第一个是预期的行为,因为_aux/__init__.py
contains from .is_error._is_error import is_error
。(格式from .folder.file import function
)
当我运行pytest
时,两个测试_abbrev_testing_test.py
失败,因为is_error
不是预期的功能。( TypeError: 'module' object is not callable
)
当我使用我想用新函数缩写的行时,它可以工作:
这包括测试_foobar_test.py
- 所以在_foobar.py
函数中被导入。
有人了解这两个文件之间的区别吗?我应该以不同的方式做到这一点吗?
我很想知道是否有一些逻辑规则可以避免这种情况。(对我来说,这看起来很荒谬和不稳定。)
编辑:在这两个文件中它都有效,当我使用不依赖的长导入语句时_aux/__init__.py
:
短:(
from mypackage._aux import is_error
格式from _aux import function
)长:(
from mypackage._aux.is_error._is_error import is_error
格式from _aux.folder.file import function
)
这个问题可以概括为:
什么在_abbrev_testing.py
破坏__init__.py
?
编辑2:重现步骤:
用 IDE 打开项目。
python-3.x - CDSW 上的相对进口
我有一个关于 CDSW 的项目,组织如下:
在我当前的代码中,我sys.path.append
用来执行我的导入。
这很好用,但这是一个不好的做法,因为如果版本发生变化,那么我需要更改所有使用该路径的脚本。
我想用一些相对路径替换它:
但我得到了错误:
我需要在架构或代码中进行哪些更改才能使其正常工作?
python - 万亿次相对进口
我有以下数据结构:
我正在运行我的file.py
并尝试导入我在useful_functions.py
.
起初我尝试了以下方法:
但出现以下错误:
然后我删除了最初有效的导入语句开头的两个点。从那以后,我重新审视了这个项目,没有任何改变,我面临着一个新的错误消息。以下代码:
给我以下错误消息:
我觉得很奇怪,有一次它可以工作,后来没有任何变化,导入失败。我真的很想用相对导入来解决这个问题,因为我希望代码可以在其他具有不同绝对文件路径的机器上工作。
提前致谢。