- 此问题在此处已有答案**:
Python relative import causes SyntaxError exception(2个答案)
六年前关闭了。
我现在使用的代码的文件结构如下所示:
school_project/
__init__.py #(empty)
main_functions/
__init__.py #(empty)
render.py
filter.py
helper_functions/
__init__.py #(empty)
string.py
utility.py
目前,我需要在render.py
文件中使用utility.py
中创建的函数,我解决这个问题的第一次尝试是在render.py
文件中执行import ..helper_functions.utility
。
不幸的是,它遇到了以下错误消息。
import ..helper_functions.utility
^
SyntaxError: invalid syntax
首先,我不知道为什么这种相对导入不起作用。
第二,我应该使用绝对导入吗?以import school_project.helper_functions.utility
的形式?如果是这样,我是否需要将school_project/
当前所在的目录添加到PYTHONPATH中?我该怎么做?
我只是修改了我的计算机的PATH,PYTHONPATH就会相应地进行调整吗?或者它们是独立的实体,进程会更复杂一些?我看过其他线程,但它们似乎都在运行时修改了PYTHONPATH,我认为这是未来错误的一个巨大潜在来源。
2条答案
按热度按时间ozxc1zmp1#
你应该这样做:
如果由于相对导入而正常运行python程序,这将不起作用。
这是您应该运行它的方式:
但是它有点冗长,而且不能很好地与#!/usr/bin/env python3这样的shebang行混合。
虽然它不是唯一的。你的包结构比较复杂。你需要把包含你的包目录的目录包含在PYTHONPATH中,并像这样做。
从mypackage.mymodule导入为_int
你也可以这样做。但是这不是推荐给初学者的。你只需要先用这个在代码中frob PYTHONPATH。
apeeds0o2#
在第8章中建议绝对导入:
推荐使用绝对导入,因为如果导入系统配置不正确(例如,当一个包内的一个目录在sys.path上结束时),它们通常更可读,表现更好(或者至少给予更好的错误消息):
至于
PYTHONPATH
,现在最好在每个终端会话中设置一次,一旦您继续使用pycharm这样的IDE,它将自动为您管理