在python包的开发过程中如何正确地进行导入?

2024-05-14 10:08:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个计算机科学的一年级学生,目前正在做一个小项目,我保存到dropbox供学校使用。你知道吗

我为一个可能无关紧要的问题提前道歉。但是我几乎没有经验,在尝试了我所学的所有调试技术之后,我真的被卡住了!你知道吗

它具有以下文件结构

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?我该怎么做?你知道吗

我是否可以修改我的计算机的路径,而PYTHONPATH将相应地进行调整?或者它们是独立的实体,而且过程更复杂一些?我查看了其他线程,但它们似乎都在运行时修改python脚本本身的PYTHONPATH,我认为这是未来bug的巨大潜在来源。你知道吗


Tags: 文件项目pyimporthelperprojectinitrender
2条回答

你应该这样做:

  from ..helper_functions import utility

如果由于相对导入而正常运行python程序,这将不起作用。你知道吗

你应该这样做:

python3 -m helper_functions.utility

但它有点冗长,与#这样的shebang行不太协调!/usr/bin/envPython3。你知道吗

虽然它不是独一无二的。您的包结构更复杂。您需要将包含包目录的目录包含在PYTHONPATH中,并这样做。你知道吗

从mypackage.mymodule模块作为int导入

你也可以这样做。但初学者不建议这样做。 你先用这个把Python从代码里拖出来。。。你知道吗

import sys
import os

PACKAGE_PARENT = '..'
SCRIPT_DIR = os.path.dirname(os.path.realpath(os.path.join(os.getcwd(), os.path.expanduser(__file__))))
sys.path.append(os.path.normpath(os.path.join(SCRIPT_DIR, PACKAGE_PARENT)))

from mypackage.mymodule import as_int

政治公众人物8建议绝对进口:

Absolute imports are recommended, as they are usually more readable and tend to be better behaved (or at least give better error messages) if the import system is incorrectly configured (such as when a directory inside a package ends up on sys.path ):

至于PYTHONPATH,现在最好在您处理项目的每个终端会话中设置一次。一旦您继续使用像pycharm这样的IDE,它将自动为您管理

相关问题 更多 >

    热门问题