相关疑难解决方法(0)

Python 3中的包不需要__init__.py吗?

我使用的是Python 3.5.1.我在这里阅读了文档和包部分:https://docs.python.org/3/tutorial/modules.html#packages

现在,我有以下结构:

/home/wujek/Playground/a/b/module.py
Run Code Online (Sandbox Code Playgroud)

module.py:

class Foo:
    def __init__(self):
        print('initializing Foo')
Run Code Online (Sandbox Code Playgroud)

现在,在/home/wujek/Playground:

~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
Run Code Online (Sandbox Code Playgroud)

同样,现在在家里,超级文件夹Playground:

~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
Run Code Online (Sandbox Code Playgroud)

实际上,我可以做各种各样的事情:

~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Run Code Online (Sandbox Code Playgroud)

为什么这样做?我虽然有被需要的__init__.py文件(空的都可以)两种a,并bmodule.py要导入的时候Python的路径指向Playground文件夹?

这似乎已经从Python 2.7改变了:

~ $ PYTHONPATH=Playground …
Run Code Online (Sandbox Code Playgroud)

python package python-3.x

146
推荐指数
5
解决办法
6万
查看次数

Python模块的绝对与显式相对导入

我想知道在Python应用程序中导入包的首选方法.我有这样的包结构:

project.app1.models
project.app1.views
project.app2.models
Run Code Online (Sandbox Code Playgroud)

project.app1.views进口project.app1.modelsproject.app2.models.有两种方法可以实现这一点.

绝对进口:

import A.A
import A.B.B
Run Code Online (Sandbox Code Playgroud)

或者使用PEP 328Python 2.5中引入的显式相对导入:

# explicit relative
from .. import A
from . import B
Run Code Online (Sandbox Code Playgroud)

什么是最pythonic的方式来做到这一点?

python package python-import

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

导入错误,没有名为xxxx的模块

我有一个具有该结构的项目

/example
../prediction
....__init__.py
....a.py
Run Code Online (Sandbox Code Playgroud)

PYTHONPATH指向/示例

现在我打开终端中的python并输入

import prediction
Run Code Online (Sandbox Code Playgroud)

它成功了,但如果我输入

import prediction.a
Run Code Online (Sandbox Code Playgroud)

它返回错误

ImportError: No module named 'prediction.a'; 'prediction' is not a package
Run Code Online (Sandbox Code Playgroud)

这是为什么?不是已经作为包导入

python python-3.x

46
推荐指数
1
解决办法
3万
查看次数

标签 统计

python ×3

package ×2

python-3.x ×2

python-import ×1