相关疑难解决方法(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万
查看次数

如何在Python中进行相对导入?

想象一下这个目录结构:

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py
Run Code Online (Sandbox Code Playgroud)

我正在编码mod1,我需要从中导入一些东西mod2.我该怎么办?

我尝试了from ..sub2 import mod2但是我得到了"尝试非包装中的相对导入".

我google了一下,但发现只有" sys.path操纵"黑客.有没有干净的方式?


编辑:我__init__.py的所有人目前都是空的

EDIT2:我想这样做,因为SUB2包含了为子包(共享类sub1,subX等等).

Edit3:我正在寻找的行为与PEP 366中描述的相同(感谢John B)

python python-module python-import

508
推荐指数
11
解决办法
31万
查看次数

任何人都可以解释python的相对进口吗?

我不能为我的生活得到python的相对导入工作.我创建了一个它不起作用的简单示例:

目录结构是:

/__init__.py
/start.py
/parent.py
/sub/__init__.py
/sub/relative.py
Run Code Online (Sandbox Code Playgroud)

/start.py 仅包含: import sub.relative

/sub/relative.py 只包含 from .. import parent

所有其他文件都是空白的.

在命令行上执行以下操作时:

$ cd /
$ python start.py
Run Code Online (Sandbox Code Playgroud)

我明白了:

Traceback (most recent call last):
  File "start.py", line 1, in <module>
    import sub.relative
  File "/home/cvondrick/sandbox/sub/relative.py", line 1, in <module>
    from .. import parent
ValueError: Attempted relative import beyond toplevel package
Run Code Online (Sandbox Code Playgroud)

我使用的是Python 2.6.为什么会这样?如何使这个沙盒示例工作?

python

165
推荐指数
2
解决办法
10万
查看次数

Python中的相对导入

嘿所有 - 我用Python中的相对导入拉出我的头发.我已经阅读了30次文档和SO和其他论坛上的大量帖子 - 似乎仍然没有用.

我的目录结构目前看起来像这样

src/
    __init__.py
    main.py
    components/
        __init__.py
        expander.py
        language_id.py
    utilities/
        __init__.py
        functions.py
Run Code Online (Sandbox Code Playgroud)

我希望expandder.py和language_id.py可以访问函数模块.我运行python main.py,它可以从components.expander import*和components.language_id import*访问模块.

但是,在expandder和language_id中的代码访问函数模块:

from ..utilities.functions import *
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ValueError: Attempted relative import beyond toplevel package
Run Code Online (Sandbox Code Playgroud)

我已经过了很多次,它似乎遵循文档.任何人都对这里出了什么问题有任何想法?

python python-packaging

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

如何在Python模块中正确使用相对或绝对导入?

在Python中使用相对导入有一个缺点,您将无法再将模块作为独立模块运行,因为您将获得异常: ValueError: Attempted relative import in non-package

# /test.py: just a sample file importing foo module
import foo
...

# /foo/foo.py:
from . import bar
...
if __name__ == "__main__":
   pass

# /foo/bar.py: a submodule of foo, used by foo.py
from . import foo
...
if __name__ == "__main__":
   pass
Run Code Online (Sandbox Code Playgroud)

我应该如何修改样本代码,以便能够执行所有:test.py,foo.py和bar.py

我正在寻找一个适用于python 2.6+(包括3.x)的解决方案.

python module packages python-module python-import

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

如何在python中完成相对导入

stuff/
    __init__.py
    mylib.py
    Foo/
        __init__.py
        main.py
        foo/
            __init__.py
            script.py
Run Code Online (Sandbox Code Playgroud)

script.py 想要导入 mylib.py

这只是一个例子,但实际上我只是想在父目录中进行模块的相对导入.我尝试过各种各样的东西并得到这个错误......

Attempted relative import beyond toplevel package

我在某处读到程序启动的脚本不应该在包中,我尝试修改结构就像这样......

stuff/
    mylib.py
    foo.py // equivalent of main.py in above
    foo/
        __init__.py
        script.py
Run Code Online (Sandbox Code Playgroud)

但得到了同样的错误.

我怎么能做到这一点?这甚至是一种适当的方法吗?

编辑:在Python 2中

python relative-path python-2.x python-packaging

23
推荐指数
3
解决办法
4万
查看次数

python相对导入怪异

我有一个文件:

STARTDIR/module/submodule/config.py
Run Code Online (Sandbox Code Playgroud)

我还有另一个文件:

STARDIR/utils/filesys/getAbsPath.py
Run Code Online (Sandbox Code Playgroud)

为什么这行有效config.py?

from ..utils.filesys import getAbsPath
Run Code Online (Sandbox Code Playgroud)

似乎是..指module,不是STARTDIR。有没有utils在module所有。实际上,

from .. import utils
Run Code Online (Sandbox Code Playgroud)

产量

ImportError: cannot import name utils
Run Code Online (Sandbox Code Playgroud)

python import

1
推荐指数
1
解决办法
902
查看次数