首先,由于您没有具体说明您遇到了哪个 lint 错误,我假设这是因为您在sys.path.append
.
最干净的方法是使用相对或绝对导入。
使用绝对导入:
from parent_path.codeHelpers import completion_message
使用相对导入:
from ..codeHelpers import completion_message
对于原始问题中列出的简单示例,这应该是所需要的。它很简单,它是 pythonic,它是可靠的,并且它修复了 lint 问题。
您可能会发现自己处于上述情况对您不起作用并且sys.path
仍然需要操作的情况。一个缺点是您的 IDE 可能无法解决从新路径导入模块的问题,从而导致自动代码完成无法正常工作以及将导入标记为错误等问题,即使代码可以正常运行。
如果您发现仍然需要使用sys.path
并希望避免这种情况下的 lint 错误,请创建一个新模块并在其中进行sys.path
操作。然后确保在需要修改的任何模块之前导入新模块sys.path
。
例如:
local_imports.py
"""Add a path to sys.path for imports."""
import os
import sys
# Get the current directory
current_path = os.path.dirname(__file__)
# Get the parent directory
parent_path = os.path.dirname(current_path)
# Add the parent directory to sys.path
sys.path.append(parent_path)
然后在目标文件中:
import local_imports # now using modified sys.path
from codeHelpers import completion_message
这样做的缺点是它需要您包含local_imports.py
在每个文件中child_folder
,如果文件夹结构发生变化,您将不得不修改每个local_imports
文件。
这种模式真正有用的地方是当您需要在包中(例如在libs
文件夹中)包含外部库而不需要用户自己安装库时。
如果您将此模式用于libs
文件夹,您可能需要确保您包含的库优先于已安装的库。
为此,改变
sys.path.append(custom_path)
至
sys.path.insert(1, custom_path)
这将使您的自定义路径成为 python 解释器检查的第二个位置(第一个仍然''
是本地目录)。