相对当前脚本引入共享Python脚本的最简单方法

1 投票
2 回答
1259 浏览
提问于 2025-04-17 10:05

我想从一个Python脚本中导入另一个脚本。一个脚本里定义了一些常用的函数,其他很多脚本都想用这些函数。这里没有类,只有函数。

需要导入的脚本要从一个相对路径导入,比如 ../../SharedScripts/python/common.py

我在这个脚本里定义了一些函数,比如 def f1(...),我会调用这些函数。

我发现了一个叫做imp的模块,感觉它是对的,但我没搞清楚具体的语法怎么用才能适合我的例子。

有没有人能建议我用什么代码,或者如果imp不是合适的模块,最简单的方法是什么?

解决方案:根据下面的回答,我终于搞定了...

projectKey = 'THOR'

# load the shared script relative to this script
sys.path.append(os.path.dirname(__file__) + '/../../SharedScripts/python')
import jira

jira.CheckJiraCommitMessage(sys.argv[1], sys.argv[2], projectKey)

我在 SharedScripts/python 目录里有一个空的 __init__.py 文件和一个 jira.py 文件,里面都是简单的函数定义。

2 个回答

1

一种可能的方法是在导入之前,把这个目录添加到Python的路径中。

#!/usr/bin/env python
import sys
sys.path.append('../../SharedScripts/python')
import common
1

为什么不把 ../../SharedScripts/python/ 加到 Python 的路径里呢?这样你就可以像使用其他模块一样使用 common.py 了:

import common
common.f1()

你可以通过系统变量 PYTHONPATH 来改变 Python 的路径,或者直接在 Python 里操作: sys.path.append("../../SharedScripts/python/")

请注意,使用绝对路径可能更明智……(因为应用程序的当前目录可能会改变)

要获取绝对路径,你可以使用 os.path.abspath 这个函数: os.path.abspath('../../SharedScripts/python/')

撰写回答