想象一下这个目录结构:
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类.
结构示例:
/dir
+../subdirA
+../subdirB
+../mydir
Run Code Online (Sandbox Code Playgroud)
绝对路径不同,因为该项目在不同的机器上运行.
执行位于/ mydir中的MySampleClass的 python文件时,如何导入位于/ subdirA中的/ dir或OtherClassA中的OtherClassRoot?
我尝试过这样的事情:
from . import MySampleClass as msc
Run Code Online (Sandbox Code Playgroud)
要么
from ../ import MySampleClass as msc
Run Code Online (Sandbox Code Playgroud)
但这总是失败或给我错误消息,如非包装中尝试相对导入
那么,什么是相对导入python文件的正确方法?
任何输入都非常感谢:)
我有以下树状:
- root_folder <--- I'm here
- folder
- setup.py
- myModule
Run Code Online (Sandbox Code Playgroud)
当我python setup.py install从运行时folder,myModule 已正确安装,我可以做到import myModule。
Howerver,当我运行python folder/setup.py install的root_folder,import myModule失败了,我要打电话import folder.myModule。
如何setup.py从另一个文件夹调用脚本但将根文件夹保留为包含该setup.py文件的文件夹?