相关疑难解决方法(0)

相对进口数十亿次

我来过这里:

还有很多我没有复制的网址,有些在SO上,有些在其他网站上,当我认为我有快速解决方案的时候.

永远反复出现的问题是:使用Windows 7,32位Python 2.7.3,如何解决这个"非包装中尝试相对导入"的消息?我在pep-0328上构建了一个包的精确副本:

package/
    __init__.py
    subpackage1/
        __init__.py
        moduleX.py
        moduleY.py
    subpackage2/
        __init__.py
        moduleZ.py
    moduleA.py
Run Code Online (Sandbox Code Playgroud)

我确实在适当的模块中创建了名为spam和eggs的函数.当然,它没有用.答案显然在我列出的第4个网址中,但这对我来说都是校友.我访问过的其中一个网址上有此回复:

相对导入使用模块的name属性来确定模块在包层次结构中的位置.如果模块的名称不包含任何包信息(例如,它设置为'main'),则解析相对导入,就像模块是顶级模块一样,无论模块实际位于文件系统的哪个位置.

上面的反应看起来很有希望,但它对我来说都是象形文字.所以我的问题是,如何让Python不回归"尝试非包装中的相对导入"?有一个答案涉及-m,据说.

有人可以告诉我为什么Python会给出错误信息,非包装意味着什么!,为什么以及如何定义"包裹",并且准确的答案足以让幼儿园儿童理解.

编辑:导入是从控制台完成的.

python import relative-path python-2.7

564
推荐指数
8
解决办法
17万
查看次数

导入语句python3的更改

我不理解pep-0404的以下内容

在Python 3中,包中的隐式相对导入不再可用 - 仅支持绝对导入和显式相对导入.此外,星型导入(例如来自x import*)仅允许在模块级代码中使用.

什么是相对进口?在python2中允许星形导​​入的其他地方?请举例说明.

python python-3.x

157
推荐指数
4
解决办法
10万
查看次数

Python 3中的相对导入不起作用

我有以下目录:

mydirectory
??? __init__.py
??? file1.py 
??? file2.py
Run Code Online (Sandbox Code Playgroud)

我有一个在file1.py中定义的函数f.

如果,在file2.py中,我这样做

from .file1 import f
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

SystemError:父模块''未加载,无法执行相对导入

为什么?以及如何使它工作?

python import module

52
推荐指数
3
解决办法
5万
查看次数

如何在带有 if __name__='__main__' 块的 Python3 中使用相对导入?

我正在制作一个包,这个包中的模块在if __name__=='__main__':块中包含用于测试目的的代码。但是我尝试在这些模块中使用相对导入会导致错误。

我已经阅读了这个帖子和其他十亿人: 第 10 亿次的相对进口

在将其标记为重复之前,如果我想做的事情在 Python3 中是不可能的,那么我的问题是为什么它可以在 Python2 中工作,以及是什么促使决定在 Python3 中如此麻烦?


这是我的示例 Python 项目:

mypackage
- module1.py
- module2.py
- __init__.py
Run Code Online (Sandbox Code Playgroud)

__init__.py并且module2.py是空的

module1.py 包含:

import module2

# module1 contents

if __name__=="__main__":
    # Some test cases for the contents of this module
    pass
Run Code Online (Sandbox Code Playgroud)

这在 Python2 中工作正常。我可以从我计算机上任何位置的其他项目导入 module1,我也可以直接运行 module1 并if运行块中的代码。

但是,这种结构在 Python3 中不起作用。如果我尝试在其他地方导入模块,它会失败:

>>> from mypackage import module1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\_MyFiles\Programming\Python Modules\mypackage\module1.py", line …
Run Code Online (Sandbox Code Playgroud)

python relative-path python-import python-3.x python-packaging

7
推荐指数
2
解决办法
2613
查看次数

Python3 相对导入在包中失败

我一直在阅读大量与此事相关的问题,但到目前为止没有一个对我有帮助。我目前正在使用 Pythonclick库将脚本作为命令执行。

我正在尝试执行的当前命令放置在具有__main__.py文件的 Python 包中,就像父目录一样。当前的项目结构如下。

/myproject
   /foo_one
       __init__.py
       foo_one.py
    /foo_two
       __init__.py
       foo_two.py
    /foo_three
       __init__.py
       foo_three.py
    /foo_four
       __init__.py
       foo_four.py
    /foo_five
       __init__.py
       foo_five.py
    /foo_six
       __init__.py
       foo_six.py
    __init__.py
    __main__.py
    foo_seven.py
Run Code Online (Sandbox Code Playgroud)

每当我尝试运行__main__.py位于项目文件夹中的脚本时,都会出现以下错误。

ModuleNotFoundError: No module named '__main__.foo_two'; '__main__' is not a package

但是,如果我尝试使用这样的-m选项从上面的文件夹中执行相同的脚本python3 myproject -m,则会显示以下内容。

ImportError: attempted relative import with no known parent package

__main__.py有2个进口这样的...的__init__.py是空的。

from .foo_two.foo_two import AClass, AnotherClass, OtherClass
from .foo_three.foo_three import AnotherClassMore
Run Code Online (Sandbox Code Playgroud)

更新:更正上一个命令中的语法错误,同时调用python -m myproject …

python python-3.x

4
推荐指数
1
解决办法
2万
查看次数