努力将相对路径附加到我的sys.path

问题描述 投票:0回答:1

所以有很多非常相似的问题,但似乎没有一个答案能满足我的需求。

本质上我是在命令行中使用绝对目录运行 python 脚本。
在这个文件本身中,我想导入一个模块/文件,我目前使用绝对路径来执行此操作(

sys.path.append(/....)

但我想使用相对于脚本本身的相对路径。
我似乎能做的就是附加一个相对于我当前工作目录的路径。

我该怎么做?

python relative-path
1个回答
71
投票

以下两种替代可能性适用于 Python 版本 2 和 3。选择您喜欢的方式。涵盖所有用例。

示例1

模块正在从当前运行模块 (

./bar/baz
) 目录的子目录 (
/some/path/foo
) 导入。

main script:      /some/path/foo/foo.py
module to import: /some/path/foo/bar/baz/mymodule.py

添加

foo.py

import sys, os
sys.path.append(os.path.join(sys.path[0], 'bar', 'baz'))
from mymodule import MyModule

示例2

模块正在从当前运行模块 (

./bar/baz
) 的 parent 目录 (
/some/path/
) 的子目录 (
/some/path/foo
) 导入。

main script:      /some/path/foo/foo.py
module to import: /some/path/bar/baz/mymodule.py

添加

foo.py

import sys, os
sys.path.append(os.path.join(os.path.dirname(sys.path[0]), 'bar', 'baz'))
from mymodule import MyModule

说明

  • sys.path[0]
    在两个示例中都是
    /some/path/foo
  • os.path.join('a','b','c')
    'a/b/c'
  • 更便携
  • os.path.dirname(mydir)
    os.path.join(mydir,'..')
  • 更便携

另请参阅

有关导入模块的文档:

© www.soinside.com 2019 - 2024. All rights reserved.