问题标签 [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 投票
1 回答
4832 浏览

python - 如何修复“ImportError:尝试在没有已知父包的情况下进行相对导入”

我使用 PyCharm,我正在尝试将一个类/模块从一个脚本导入另一个脚本。

我的两个脚本在同一个目录中:

脚本_A:

脚本_B:

但问题是,如果我运行 script_B 则会出现错误:

那么为什么这不起作用呢?为什么会出现错误?我该如何解决?

0 投票
1 回答
131 浏览

python - 使用 imp 时的相对导入,__init__.py 的行为不同

我正在使用python 3.7。使用时imp,我注意到相对导入的工作方式不同,具体取决于相对导入发生的位置。

例如,我有以下目录:

和文件内容如下:

imp.load_source同时使用dir2/__init__.pyand dir2/b.py,得到以下结果:

为什么与其他 python 文件imp.load_source的行为不同?__init__.py

0 投票
1 回答
41 浏览

python - 来自同一目录的python相对导入无法按预期工作

我有以下目录结构:

从 withing sub1.py 我可以成功地导入 sub2 with:import pkg.sub2或使用相对导入,from . import sub2但我认为以下相对导入:import .sub2应该也可以,但事实并非如此。我得到一个SyntaxError: invalid syntax 为什么这不起作用?

0 投票
2 回答
155 浏览

python - 从当前工作目录相对导入 python 模块

在当前工作目录中,我有以下结构

我想从 test1.py 调用 query_generator ,我尝试调用

但出现以下错误

这个问题可能与以下Importing files from different folder重复,Python relative-import script 上两层Attempted relative import with no known parent package。但我无法解决我目前的问题

0 投票
1 回答
24 浏览

python-3.x - 是否可以解决相对进口的问题?

我在导入机制方面遇到了一些问题。例如,我有一棵这样的树:

第二个.py:

第一.py:

测试.py:

当我尝试运行时,出现test.py此错误:

感觉好像second.py不是在 中搜索my_package,而是在my_pacakage和所在的目录中搜索test.py。这是一个奇怪的机制,因为如果我有一个现成的包,我不想在其中创建一些新文件,我想从另一个地方与之交互。

0 投票
2 回答
30 浏览

python - 如何使用 python 3.75 从子包到顶级文件夹工作目录的相对导入?

我正在尝试从test_smallcircle.pya.py进行相对导入,如下所示

但它显示下一个错误

0 投票
0 回答
67 浏览

python - 如何在同一目录级别的另一个文件夹中相对导入脚本?

所以我想在同一目录级别的其他文件夹中导入脚本。

就像这样:

我想将一个类从基本文件导入物理文件。

编辑

我决定将这些文件重命名为 basic.py 和physics.py 并将它们放在同一个文件夹中,因此目录现在看起来像这样:

0 投票
1 回答
350 浏览

python - 显式相对导入的正确样板是什么?

PEP 366 - Main module explicit relative imports中引入了模块范围变量__package__以允许子模块中的显式相对导入,有以下摘录:

当主模块由其文件名指定时,该 __package__属性将设置为None. 为了在直接执行模块时允许相对导入,在第一个相对导入语句之前需要类似于以下的样板:

请注意,只有当顶层包已经可以通过 sys.path. 需要额外的操作代码sys.path才能直接执行,而无需导入顶级包。

这种方法也有与使用同级模块的绝对导入相同的缺点 - 如果脚本被移动到不同的包或子包,则需要手动更新样板。它的优点是,无论相对导入的数量如何,每个文件只需要进行一次更改。

我尝试在以下设置中使用此样板:

  • 目录布局:

  • bar.py 子模块的内容:

当从文件系统执行子模块 bar.py 时样板工作(PYTHONPATH修改使包 foo/ 可在 上访问sys.path):

当从模块命名空间执行子模块 bar.py 时,样板也可以工作:

但是,以下替代样板在这两种情况下都与 bar.py 子模块的内容一样有效:

此外,这个替代样板更简单,并且当它与子模块 baz.py 一起移动到不同的包时不需要对子模块 bar.py 进行任何更新(因为它没有硬编码包名"foo")。

所以这是我关于 PEP 366 样板的问题:

  1. 第一个子表达式__name__ == "__main__"是必需的还是已经被第二个子表达式暗示了__package__ is None
  2. 为了处理空字符串在哪里的情况(例如在通过提供包含目录从文件系统执行的子模块中:),不__package__ is None应该改为使用第二个子表达式吗?not __package____package____main__.pyPYTHONPATH=$(pwd) python3 foo/
0 投票
0 回答
331 浏览

python-3.x - Python 进口和芹菜工人

我有以下目录结构:

富/富.py

运行.py

任务.py

当我用它运行芹菜时,$ celery -A tasks worker它给了我:

如果我只在tasks.py

我明白了ImportError: attempted relative import with no known parent package

我认为我的导入是错误的,但我无法理解 Python 如何处理导入。

0 投票
1 回答
85 浏览

python-3.x - 未找到模块且 __main__ 不是 python 导入中的包

我的 python 代码有以下文件夹结构,我正在使用 Python3。

在 test_driver.py 中,我已经导入了模块,如下所示

当我在 test_driver.py 中导入 sb_friver.py 时,出现以下错误。

我什至试过没有'。在模块前面。但我没有运气。