相关疑难解决方法(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 3中相对导入的问题了,但是在经历了很多这些问题后,我仍然找不到我的问题的答案.所以这是问题所在.

我有一个如下所示的包裹

package/
   __init__.py
   A/
      __init__.py
      foo.py
   test_A/
      __init__.py
      test.py
Run Code Online (Sandbox Code Playgroud)

我在test.py中有一行:

from ..A import foo
Run Code Online (Sandbox Code Playgroud)

现在,我在文件夹中package,我跑了

python -m test_A.test
Run Code Online (Sandbox Code Playgroud)

我收到了消息

"ValueError: attempted relative import beyond top-level package"
Run Code Online (Sandbox Code Playgroud)

但如果我在父文件夹中package,例如,我运行:

cd ..
python -m package.test_A.test
Run Code Online (Sandbox Code Playgroud)

一切都好.

现在我的问题是: 当我在文件夹中时package,我在test_A子包中运行模块test_A.test,根据我的理解,..A只上升一个级别,它仍然在package文件夹中,为什么它给出了消息说beyond top-level package.导致此错误消息的原因是什么?

python import package

238
推荐指数
12
解决办法
18万
查看次数

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导入失败

我有一个目录结构:

network/__init__.py
network/model.py
network/transformer/__init__.py
network/transformer/t_model.py
Run Code Online (Sandbox Code Playgroud)

这两个__init__.py文件都合适

__all__ = [
    "model",  # or "t_model" in the case of transformer
    "view",
    ]
Run Code Online (Sandbox Code Playgroud)

在t_model.py中,我有

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

但它说:

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

如果我试试

from ..model import Node
Run Code Online (Sandbox Code Playgroud)

它说:

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

这些都是非常令人困惑的错误.


编辑:即使绝对导入失败:

import network as N
print(dir(N), N.__all__)
import network.model as M

['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'transformer'] ['model', 'view']
Traceback (most recent call last):..........
AttributeError: 'module' object has no attribute 'model'
Run Code Online (Sandbox Code Playgroud)

编辑:这是一个循环导入 …

python import python-import

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

导入父目录以进行简短测试

我从上到下搜索过这个网站,但还没有找到一种方法来实际完成我想要的Python3x.这是一个简单的玩具应用程序,所以我想我可以在断言中编写一些简单的测试用例并将其称为一天.它确实会生成报告等,所以我想确保我的代码在更改时不会做任何事情.

我目前的目录结构是:(仅包括相关部分)

project
  -model
     __init__.py
     my_file.py
     -test
       my_file_test.py
Run Code Online (Sandbox Code Playgroud)

我有一段时间让my_file_test.py导入my_file.py.

就像我说的那样.我从上到下搜索过这个网站,没有解决方案.我的Python版本是在Fedora 17上运行的3.2.3.

以前尝试过的尝试: https: //stackoverflow.com/questions/5078590/dynamic-imports-relative-imports-in-python-3从父文件夹导入模块 任何人都可以解释python的相对导入吗? 如何在python中完成相对导入

几乎在每次尝试中我都会收到错误:

ImportError:没有名为*OR ValueError的模块:在非包中尝试相对导入

这里发生了什么.我已经尝试了SO以及整个互联网上的所有接受的答案.没有做任何想象的事情,但作为一个.NET/Java/Ruby程序员,这被证明是直观性的绝对定义.

编辑:如果重要,我尝试加载我试图在REPL中导入的类,我得到以下内容:

>>> import datafileclass
>>> datafileclass.methods
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
>>> x = datafileclass('sample_data/sample_input.csv')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
Run Code Online (Sandbox Code Playgroud)

如果它很重要......我知道类中的功能可以工作,但是我无法导入它在现在导致无法测试.将来肯定会引发整合问题.(名称已更改,以保护无辜者)在几周内获得库的此迭代所需的功能...任何帮助都可能有用.本来可以在Ruby中完成它,但客户希望Python作为一种学习体验,

fedora pythonpath project-layout python-3.x

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

相对进口

我正在阅读Two Scoops Django最佳实践,以提高我的编码风格.我是相对导入的,这里是使其可重用的示例代码.

Old Way:
from cones.foo import bar

New way:
from .foo import bar
Run Code Online (Sandbox Code Playgroud)

以上代码适用于cones应用程序,如果我在其他应用程序中调用其他模型该怎么办?我必须这样说:

from .foo import bar
from .other import sample

OR

from .foo import bar
from test.other import sample
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法?

django

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