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

python - Python 包:相对导入

我正在开发一个 Python 应用程序,该应用程序由一个核心和多个使用该核心的独立模块组成。我在设置包的相对导入时遇到了困难。

__init__.py文件是空的。我正在运行 Python 2.7.1。

运行python main.py结果在ValueError: Attempted relative import in non-package.

类似的问题:相对 python 导入的终极答案如何在 Python 中进行相对导入?, Python 中的相对导入

谢谢您的帮助。

0 投票
1 回答
819 浏览

python - Python相对导入从随机目录调用脚本

我有以下目录结构:

b.py 需要在 a.py 中导入一个类。所以我可以在导入 a.py 之前将以下行添加到 b.py 中。

sys.path.append(os.path.dirname(sys.argv[0]) + "/..")

这有效,我可以从任何目录调用 b.py 并且它能够导入 a。但是,当我在另一个目录中编写脚本以使用 execfile() 调用此文件时,这将失败。

我尝试了相对导入,但出现“尝试在非包中导入相对导入错误”

我有__init__.py两个test1,test2

有人知道如何使它工作吗?是PYTHONPATH要走的路吗?

0 投票
3 回答
178 浏览

python - 使包中的每个模块都可以从内部访问?

应该如何构建 Python 包以使其内部的任何模块都成为可能?

我的文件结构如下:

main.py初始化一切。我想导入foo/analyse.pybar/dbhandler.py,但我只收到一个错误:

我尝试了几种说法:

他们都给出了相同的错误。我也试过:

但我收到:

我已经浏览了 StackOverflow 上的大约 50 个线程和互联网上的无数文章。从我发现的所有内容来看import src.foo.*,如果只有__init__.py文件位于每个文件夹中,该语句应该可以在包内的任何地方工作。

有没有人有同样的问题?

0 投票
14 回答
392435 浏览

python - 十亿次相对进口

我来过这里:

还有很多我没有复制的 URL,一些在 SO 上,一些在其他网站上,当我认为我会很快找到解决方案时。

永远重复出现的问题是:如何解决这个“尝试在非包中进行相对导入”消息?

我在 pep-0328 上构建了该软件包的精确副本:

导入是从控制台完成的。

我确实在相应的模块中创建了名为 spam 和 egg 的函数。自然,它没有奏效。答案显然在我列出的第 4 个 URL 中,但对我来说都是校友。我访问的其中一个 URL 上有这样的响应:

相对导入使用模块的名称属性来确定该模块在包层次结构中的位置。如果模块的名称不包含任何包信息(例如,它被设置为'main'),那么无论模块实际位于文件系统上的什么位置,相对导入都会被解析为好像该模块是顶级模块一样。

上面的回复看起来很有希望,但对我来说都是象形文字。所以我的问题是,如何让 Python 不返回给我“尝试在非包中进行相对导入”?据说有一个涉及-m的答案。

有人可以告诉我为什么 Python 会给出该错误消息,“非包”是什么意思,为什么以及如何定义“包”,以及用幼儿园儿童容易理解的术语给出的准确答案

0 投票
1 回答
559 浏览

namespaces - XML 命名空间中的分隔符 - 命名空间的相对导入

我有一个关于 XML 命名空间的概念性问题:如果我在文件夹层次结构中有两个不同的 xsd 文件:

在这两个文件中,我通过 targetNamespace 属性定义了一个单独的命名空间:

在 fileA.xsd 那将是

在 fileB.xsd 中,这将是:

我可以使用 th eurl 中的路径进行相对导入吗?

我可以例如使用

在文件 B.xsd 中?

我并不真正关心这样做的方法,我知道有各种方法可以指定模式定义的位置,我只关心 url 中路径的含义。

据我所知,url 只是一个字符串,用于唯一标识 xsd 文件中的类型(除了为定义文件指定一个可能看起来的位置 - 不能保证)。我对么 ?

希望我的问题不会太奇怪而无法回答:)

提前非常感谢米莎

0 投票
1 回答
623 浏览

python - 如何导入这个包?python3.3中的相对导入

我正在尝试在我的机器上完成这项工作(arch,使用 gnome 3)。我认为设置正常(我替换了所有打印命令)但是当我chemlab在终端上运行时出现错误,告诉我没有核心包:

所以我尝试在本地运行文件。我去了相应的文件夹并运行python __init__.pyNo I get

我搜索了一下,发现我可以(应该?)替换..libs.ckdtree import cKDTreechemlab.libs.ckdtree import cKDTree我这样做只是为了得到

Traceback(最近一次调用最后一次):文件“”,第 1 行,在文件“./core/init .py ”中,第 1 行,在 from .molecule import Molecule,Atom 文件“./core/molecule.py”中,行6、在 from chemlab.libs.ckdtree import cKDTree File "/usr/lib/python3.3/site-packages/chemlab-0.2-py3.3-linux-i686.egg/chemlab/init .py ",第1行, in from core.molecule import Molecule, Atom ImportError: cannot import name Molecule

这让我很困惑。我怎样才能导入/运行它?

编辑:文件夹结构:

编辑 2: chemlab/__init__.py只有一行来自 core.molecule import Molecule, Atom

和 chelab/core/molecule/ 导入部分看起来像

0 投票
2 回答
2559 浏览

python - 如何调试需要使用-m执行的python模块?

我在那里尝试的每个调试器都需要一个源文件来调试。然而,Python 并不总是以这种方式工作。

我有一个模块,它是一个文件夹,里面有__init__.py文件__main__.py,除其他外,我通常这样执行:

如果我不使用-m,则相对导入失败。如果我只是将文件夹传递给pudbpdb其他人,调试器将失败:

我该如何调试呢?最好使用pudb, 并且不删除相对导入。

0 投票
2 回答
864 浏览

python - Python importing only modules within package

I am creating a Python package with multiple modules. I want to make sure that when I import modules within the package that they are importing only from the package and not something outside the package that has the same name.

Is the correct way of doing this is to use relative imports? Will this interfere when I move my package to a different location on my machine (or gets installed wherever on a customer's machine)?

0 投票
1 回答
52 浏览

python - Python - 引用的包是其他包的属性

如何让一个包引用另一个包,但让它看起来像引用的包属于初始包?

里面 package_1.__init__.py 是

现在以下调用工作正常:

但我希望能够做到这一点:

但我得到:

我想这样做的原因是因为 package_2 曾经是 package_1 的子包。现在 package_2 是它自己的包,我希望能够从 package_1 引用它以保持以前的行为。

0 投票
1 回答
10518 浏览

python - 从 __init__.py 文件的相对导入引发错误

所以我正在使用由同事设置的模板,作为 python 的新手,我可能会遗漏一些非常明显的东西。

主目录有 init 文件,其中包含生成错误的主要 python 文件所需的模块。

同事用过:

其中 X 是模块,但是当将此(和填充的初始化文件)复制到我自己的目录时,它会生成此错误:

ValueError:尝试在非包中进行相对导入

从谷歌和 SO 我了解到这是非常好的和合乎逻辑的,所以我想知道,作为一个新手,我错过了什么。