使用没有显式绝对路径的

时间:2015-08-16 23:32:09

标签: python import module sys

使用sys.path启用从其他目录导入模块的新功能,所以我确定这是一个noob问题,但是:

使用sys.path访问另一个目录中的Python脚本时,是否可以不必使用完整/显式或绝对文件路径,而是仅提供本地的目录路径到模块文件结构?

目前,我有以下目录结构:

MyModule/
     NAME/
         __init__.py
     bin/
         userinfo.py
         __init__.py
     docs/
     setup.py
     tests/
         NAME_tests.py
         __init__.py

在setup.py文件中,我让它导入userinfo.py脚本,它只是在安装过程中询问用户一些信息。在setup.py文件中,调用userinfo.py脚本的行如下所示:

import sys
sys.path.insert(0, '/Users/malvin/PythonDev/projects/MyModule/bin')
import userinfo 

这很好用,因为我知道userinfo.py文件所在的整个文件路径,但显然这对于​​尝试安装模块的人来说并不适用,因为(很明显)那里有#39;无法预测用户系统上的文件路径。

我的问题:是否有一种方法可以导入userinfo.py文件(它位于/bin文件夹中),而不需要整个系统文件路径(一直到{{{ 1}})?换句话说,我想要有类似的东西:

/Users

但我知道这不起作用。

1 个答案:

答案 0 :(得分:1)

您可以使用当前工作目录的点(./)表示法来建立相对路径。

例如:

(syspathinsert)macbook:syspathinsert joeyoung$ pwd
/Users/joeyoung/web/stackoverflow/syspathinsert
(syspathinsert)macbook:syspathinsert joeyoung$ tree
.
├── MyModule.py
└── bin
    ├── userinfo.py
    └── userinfo.pyc

1 directory, 3 files
(syspathinsert)macbook:syspathinsert joeyoung$ cat ./bin/userinfo.py
def say_hello():
    print "hello there"

(syspathinsert)macbook:syspathinsert joeyoung$ cat MyModule.py 
import sys
sys.path.insert(0, './bin')
import userinfo

userinfo.say_hello()
(syspathinsert)macbook:syspathinsert joeyoung$ python MyModule.py 
hello there