使用 Flask 从父文件夹导入模块
Import modules from parent folder with Flask
我的文件夹树:
project/
app/
__init__.py
models.py
dir/test1.py
dir/__init__.py
run.py
dir/test2.py
dir/__init__.py
如果我想做一个
from app.models import Whatever
来自 test1
和 test2
唯一有效的方法是手动 sys.path.append
类似
os.path.join(os.path.dirname(__file__), "../..")
但是 有很多关于 SO 的答案说搞乱 sys.path
会给我带来麻烦(为什么?);可悲的是,经过 1 个多小时的谷歌搜索,我仍然没有找到正确的导入方法,我真的很困惑。
测试比不测试要好得多,因此如果您需要将路径附加到 sys.path
以使其工作——并且在此目录配置中,你会的——这是一个合理且务实的步骤.
但是,通常最好不要 fiddle 手动使用模块加载路径。它假定您的代码将始终加载到测试文件夹外的目录中,但这可能并不总是正确的。但是 "you will run into problems down the line" 是很淡的茶。
更大的问题是您不能使用那个小路径补丁来完成您最终将 want/need 的那种自动化测试和测试管理。更好的方法是学习使用真正的测试工具/测试 运行ner,例如 pytest or nose. Even better if you also use a macro test runner such as tox. The combination will automatically install your software (including any declared dependencies) in a completely new, pristine virtual environment。这不仅可以帮助您测试模块的正常可操作性,还可以测试其可安装性。它还将帮助您轻松 运行 跨 Python 的不同版本进行测试,只需很少的额外工作。 (例如,我目前测试了 2.6、2.7、3.2、3.3、3.4、3.5 和 PyPy 的几个版本——不是因为我使用了所有这些版本,而是因为它不需要我额外花费任何东西来制作确保我的软件 运行 跨越了整个 Python 宇宙的一大片区域。)
公平警告:第一次设置测试环境有点困难,需要付出大量努力并学习 "mechanic" 技能。但这是一项一次性投资,将为您的所有 Python 工作带来回报。
长话短说,修补 sys.path
是一个不错的起点。但是您最终将需要更多的通用性、广度、深度、测试夹具和测试自动化——而路径修补无法帮助您完成这些。升级到真正的测试工具即可。
我的文件夹树:
project/
app/
__init__.py
models.py
dir/test1.py
dir/__init__.py
run.py
dir/test2.py
dir/__init__.py
如果我想做一个
from app.models import Whatever
来自 test1
和 test2
唯一有效的方法是手动 sys.path.append
类似
os.path.join(os.path.dirname(__file__), "../..")
但是 有很多关于 SO 的答案说搞乱 sys.path
会给我带来麻烦(为什么?);可悲的是,经过 1 个多小时的谷歌搜索,我仍然没有找到正确的导入方法,我真的很困惑。
测试比不测试要好得多,因此如果您需要将路径附加到 sys.path
以使其工作——并且在此目录配置中,你会的——这是一个合理且务实的步骤.
但是,通常最好不要 fiddle 手动使用模块加载路径。它假定您的代码将始终加载到测试文件夹外的目录中,但这可能并不总是正确的。但是 "you will run into problems down the line" 是很淡的茶。
更大的问题是您不能使用那个小路径补丁来完成您最终将 want/need 的那种自动化测试和测试管理。更好的方法是学习使用真正的测试工具/测试 运行ner,例如 pytest or nose. Even better if you also use a macro test runner such as tox. The combination will automatically install your software (including any declared dependencies) in a completely new, pristine virtual environment。这不仅可以帮助您测试模块的正常可操作性,还可以测试其可安装性。它还将帮助您轻松 运行 跨 Python 的不同版本进行测试,只需很少的额外工作。 (例如,我目前测试了 2.6、2.7、3.2、3.3、3.4、3.5 和 PyPy 的几个版本——不是因为我使用了所有这些版本,而是因为它不需要我额外花费任何东西来制作确保我的软件 运行 跨越了整个 Python 宇宙的一大片区域。)
公平警告:第一次设置测试环境有点困难,需要付出大量努力并学习 "mechanic" 技能。但这是一项一次性投资,将为您的所有 Python 工作带来回报。
长话短说,修补 sys.path
是一个不错的起点。但是您最终将需要更多的通用性、广度、深度、测试夹具和测试自动化——而路径修补无法帮助您完成这些。升级到真正的测试工具即可。