我有一个项目,我想这样组织:
myproject
__init__.py
api
__init__.py
api.py
backend
__init__.py
backend.py
models
__init__.py
some_model.py
现在,我想在api.py和backend.py中导入模块model.py。我该怎么做? 我试过了
from models import some_model
但这失败了,因为“ModuleNotFoundError:No module named'models'”。 我也试过了
from ..models import some_model
然后它给了我“ValueError:试图在顶级包之外进行相对导入”。我在这里做错什么了?如何从不同的目录(不是子目录)导入文件?
不幸的是,Python只有在文件位于系统路径中时才能找到您的文件。但不要害怕!这是有办法的!
使用python的
sys
模块,我们可以在python运行时向路径添加一个目录,一旦python停止运行,它就会将其从路径中删除。您可以通过以下方式执行此操作:
但是,在导入文件之前,导入sys并设置目录路径非常重要。
祝你好运!
约旦。
虽然上面的答案都是对的,但我又找到了一个答案,为了完整起见,我想补充一下。 显然,最初执行的脚本所在的目录及其子目录会自动添加到路径列表中。
这意味着,如果您创建了一个项目根目录的开始脚本(例如main.py),该脚本稍后将执行所有其他模块(在我的例子中是api.py和backend.py),那么上面的方法使用
会有用的。
首先,这个导入语句:
应命名为:
然后您将需要获取包含
myproject
的目录,我们将此/path/to/parent
调用到sys.path
列表中。可以通过设置环境变量临时执行此操作:或者,最好通过编写
setup.py
文件并安装包来完成。遵循PyPA包装指南。在您从同一目录中写入setup.py
文件后,执行此命令以在sys.path
中设置正确的条目:相关问题 更多 >
编程相关推荐