Fel*_*lix 7 python package python-import python-3.x
我正在构建一个包含要运行的脚本的包。它们导入脚本正下方的子文件夹中包含的模块。既然__init__Python 3.3 之后就不需要了,那么正确的文件结构和import语句是什么?我不想指定从最顶层文件夹向下的导入,仅作为相对路径,在这里sub/module。
这是文件结构的当前状态:
Root\
src\
sub\
module.py
script.py
parent_module.py
setup.py
# Inside script.py
import sub.module # Doesn't work
from sub import module # Doesn't work
import src.sub.module # Does work!
import .sub.module # Doesn't work
import .parent_module # Does work!
Run Code Online (Sandbox Code Playgroud)
我想我需要一些 __init__文件,但是那是什么文件,在哪里呢?非常感谢任何帮助,我对包装不太了解。
另外,我当然愿意接受改变结构的建议,如果这能让事情变得更容易的话。
缺失__init__.py不是问题 - 您正在使用过时的相对导入。
import sub.module # implicit relative import - py2 only
from . import sub.module # explicit relative import
Run Code Online (Sandbox Code Playgroud)
请注意,.导入始终需要from .<where> import <name>表单。否则它不会产生有效的名称。script.py假设您通过python3 -m src.script- IDE运行可能会执行相同的操作,则以下操作应该有效。
from . import sub.module
from .sub import module
from .sub.module import *
from . import parent_module
Run Code Online (Sandbox Code Playgroud)
python3 script.py如果您以普通或 方式运行python3 -m script,则无法使用相对导入。在这种情况下,只有绝对导入才有效。
import sub.module
from sub import module
from sub.module import *
import parent_module
Run Code Online (Sandbox Code Playgroud)
虽然您不需要__init__.py文件,但如果您的包不是命名空间,最好添加它们。否则,其他类似构造的同名包可能会插入到您的包中。
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |