相关疑难解决方法(0)

如何在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模块中正确使用相对或绝对导入?

我有这个文件布局,如下例所示:(在这里下载:http://www.mediafire.com/ ?oug42nzvxrvoms4) http://www.python.org/dev/peps/pep-0328/#guido- S-决定

moduleX包含:

from .moduleY import spam
from .moduleY import spam as ham
from . import moduleY
from ..subpackage1 import moduleY
from ..subpackage2.moduleZ import eggs
from ..moduleA import foo
from ...package import bar
from ...sys import path
Run Code Online (Sandbox Code Playgroud)

这就是:

C:\package\subpackage1>python moduleX.py
Traceback (most recent call last):
  File "moduleX.py", line 1, in <module>
    from .moduleY import spam
ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)

我有python 2.7.2.我有

__init__.py
Run Code Online (Sandbox Code Playgroud)

每个目录中的文件.为什么这段代码不起作用?

python import

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

如何知道python脚本是否使用解释器的-m选项运行?

阅读完所有内容后,我找不到答案:

基本原理:
如果正在运行使用相对导入的测试脚本而没有-m选项,则可以打印警告消息,而不是让用户使用标准回溯导致ValueError: Attempted relative import in non-package异常.在不知情的情况下,我可以捕获此异常并且仅表明缺少-m选项可能是错误的原因.

python command-line

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

Python:相对导入意味着你不能自己执行子包吗?

我最近移植了我的Python项目以在Python 3.1上运行.为此我必须在我的项目的子模块和子包中采用相对导入的策略.我不这样做,现在项目本身有效,但我注意到我无法执行其中的任何子包或子模块.如果我尝试,我得到"builtins.ValueError:在非包中尝试相对导入".我只能导入整个项目.

这是正常的吗?

python import python-3.x

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

具有 C 扩展的 Python 项目 - 结构、导入和测试

用 python 编写的项目,带有一些 C 扩展(不使用 SWIG 等)。我正在尝试弄清楚如何构建我的项目,以便:

  1. 进口工作。导入共享对象
  2. 我不需要更改 PYTHONPATH (尝试弄清楚但失败了)。
  3. 将来,分发项目包将是最简单的。

当前的结构如下所示:

Project\

    docs\  # mainly documentation, right?

    bin\   # empty

    setup.py # setup for the project, as suggested in the above link

    project\   
        __init__.py
        module.py

        tests\
             bla_test.py

    C\ # the package of C files
        file.c
        file.so
        other_c_stuff.c
        header.h
        setup.py # setup to compile the C files and create .so files
        build\ # contaisn a bunch of (hopefully) irrelevant stuf
Run Code Online (Sandbox Code Playgroud)

它可以在 PyDev 中运行,但不能在 shell 中运行。理想的答案将解决以下问题:

  1. 该项目的建议结构。
  2. 如何执行导入(例如,从 中的 …

c python import directory-structure python-2.7

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