我已经花了一个小时在Google和SO上过这一个。对不起,再添加一个,但没有一个答案对我来说很合适。从兄弟目录导入Python类
在/VM/repo/project
我的目录结构是:
__init__.py
scripts/
getSomething.py
__init__.py
classes/
project.py
db.py
__init__.py
====================
getSomething.py
from ..classes import project
from ..classes import db
====================
project.py
class PROJECT:
def __init__(self):
stuff
====================
db.py
class DB:
def __init__(self):
stuff
=========== =========
当我尝试运行
python getSomething.py
我得到的错误
Traceback (most recent call last):
File "scripts/getSomething.py", line 4, in < module >
from ..classes import project
ValueError: Attempted relative import in non-package
我在这里错过了什么?
好吧,那么几件事情: 我的印象是,为每个目录添加'__init __。py'本质上将这些目录定义为一个包?我可能对这里的软件包有一个根本性的误解。为什么主模块永远不在包装中?其次:我的目标是在cron上运行脚本。有没有办法直接将这些类导入到脚本中?创建另一个文件'main.py'多一层看起来似乎不必要的复杂。 – ShaneOH
@ShaneOH - 我试过(尽我所能)编辑我的答案,希望能够澄清任何含糊之处......我希望它有帮助。 – mgilson
谢谢,原始答案和编辑都非常有帮助。所以我有一个最后的问题:如果我想保持这个目录结构并直接运行脚本作为主模块呢?所以没关系,他们不需要成为软件包的一部分。如何将/ classes模块导入同级文件夹中的主模块?然后,我可以从/ scripts和/ project中删除__init __。py吗? – ShaneOH