使用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
但我知道这不起作用。
答案 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