【问题标题】:sys.path.append modules relative to path of script being runsys.path.append 相对于正在运行的脚本路径的模块
【发布时间】:2013-12-19 23:28:29
【问题描述】:

我正在尝试创建一个 github 存储库,该存储库可以从任何克隆运行而无需硬编码目录依赖项。

让我们在我的仓库中说我有一个名为 myscript.py 的 python 脚本,它位于:

/d/e/f/github/myrepo/myscript/myscript.py

但我知道我的脚本依赖于通常位于以下位置的实用工具:

/d/e/f/github/myrepo/myutils/myutils.py

因此,我如何告诉我的脚本始终加载 myutils.py,其中 myutils.py 相对于 myscript.py 的相对路径始终是 ../myutils/myutils.py

截至目前 myscript.py 看起来像:

# Import modules
import sys
sys.path.append('/d/e/f/github/myrepo/myutils/')
import myutils

现在可以看到 myutils.py 的完整路径是硬编码的,所以如果其他人在自己的计算机上克隆他们的 repo,它将无法工作。

理想情况下,用户应该能够按如下方式运行 myscript.py:

cd /d/e/f/github/myrepo/myscript/
python myscript.py -h

或者,

python /d/e/f/github/myrepo/myscript/myscript.py -h

它应该可以工作,而不必硬编码 myutils 模块的完整路径,而只是相对路径......

【问题讨论】:

    标签: python github


    【解决方案1】:

    通过做一些研究,这似乎是一个可能的答案:

    # Import modules
    import subprocess, sys, os
    script_path = os.path.dirname(__file__)
    myutils_path = os.path.join(script_path, '../myutils')
    sys.path.append(myutils_path)
    import myutils
    

    【讨论】:

    • 我认为将项目中的子包myutils 的绝对路径添加到sys.path 中不是一个好主意,因为它可能会污染sys.path。但是最好只是将myrepo的路径添加到sys.path
    猜你喜欢
    • 2013-10-18
    • 2021-03-07
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 2022-01-04
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多