努力追加我的sys.path的相对路径

use*_*502 7 python relative-path

所以有很多非常相似的问题,但没有一个答案似乎满足我正在寻找的东西.

基本上我在命令行中使用绝对目录运行python脚本.
在这个文件本身,我想导入一个模块/文件,我目前使用绝对路径来做这个(sys.path.append(/....).
但是我想使用一个相对路径,相对于脚本本身.
我似乎能做的就是追加相对于我目前工作目录的路径.

我该怎么做呢?

oli*_*bre 27

以下两种备选方案适用于Python版本2和3.选择您喜欢的方式.涵盖所有用例.

例1

main script:      /some/path/foo/foo.py
module to import: /some/path/foo/bar/sub/dir/mymodule.py
Run Code Online (Sandbox Code Playgroud)

加入 foo.py

import sys, os
sys.path.append(os.path.join(sys.path[0],'bar','sub','dir'))
from mymodule import MyModule
Run Code Online (Sandbox Code Playgroud)

例2

main script:      /some/path/work/foo/foo.py
module to import: /some/path/work/bar/mymodule.py
Run Code Online (Sandbox Code Playgroud)

加入 foo.py

import sys, os
sys.path.append(os.path.join(os.path.dirname(sys.path[0]),'bar'))
from mymodule import MyModule
Run Code Online (Sandbox Code Playgroud)

说明

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

也可以看看

有关导入模块的文档: