You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不同目录下运行Python脚本时成功导入src.b模块?

解决方案

在scripts/a.py开头添加以下代码,即可实现两种执行方式下都能正常导入src.b:

import sys
import os

# 获取当前脚本a.py的绝对路径所在目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 定位到test目录(scripts目录的父目录)
test_dir = os.path.dirname(script_dir)
# 将test目录加入模块搜索路径
if test_dir not in sys.path:
    sys.path.append(test_dir)

# 后续正常导入即可
import src.b

针对你的疑问逐一解答

  • 是否需要导入sys并添加'..'?
    直接添加'..'不可靠,因为'..'是相对当前工作目录的路径,而非脚本所在目录的相对路径。必须通过os.path获取脚本的绝对路径,再推导到test目录添加到sys.path,才能不受执行时的工作目录影响。
  • 是否需要在src目录中添加__init__.py?
    Python 3.3及以上支持无__init__.py的命名空间包,但为了兼容旧版本Python,同时明确标识src是一个Python包,建议在src目录下创建一个空的__init__.py文件。
  • 是否需要使用import ..src这样的相对导入?
    不行。相对导入仅在脚本作为包的一部分被导入时生效(比如用python -m scripts.a),直接执行脚本时,脚本会被视为__main__模块,不支持这种跨目录的相对导入,会触发报错。
  • 当前目录与脚本目录是否会影响结果?
    影响极大。Python的模块搜索路径sys.path默认会把当前工作目录放在首位:在test目录执行时,当前工作目录是test/,src就在该目录下,所以能被找到;但在scripts目录执行时,当前工作目录是scripts/,src不在这个路径下,自然无法识别。我们添加test目录到sys.path的核心目的,就是让Python无论在哪执行,都能定位到src所在的位置。

内容的提问来源于stack exchange,提问作者user1801359

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:52:05