在没有显式绝对路径的情况下使用 sys.path.insert
Using sys.path.insert without explicit absolute path
刚开始使用 sys.path
从另一个目录启用模块导入,所以我确定这是一个菜鸟问题但是:
是否可以在使用 sys.path
访问另一个目录中的 Python 脚本时不必使用 full/explicit 或绝对文件路径,而是仅提供模块文件结构的本地目录路径?
目前,我的目录结构如下:
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
文件所在的整个文件路径,但显然这对尝试安装该模块的人不起作用,因为(显然)无法预料用户系统上的文件路径。
我的问题:有没有一种方法可以导入 userinfo.py
文件(位于 /bin
文件夹中)而无需整个系统文件路径(一直到/Users
) ?换句话说,我只想拥有类似的东西:
import sys
sys.path.insert(0, 'MyModule/bin')
import userinfo
但我知道这行不通。
您可以对当前工作目录使用点 (./
) 符号来建立相对路径。
例如:
(syspathinsert)macbook:syspathinsert joeyoung$ pwd
/Users/joeyoung/web/Whosebug/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
刚开始使用 sys.path
从另一个目录启用模块导入,所以我确定这是一个菜鸟问题但是:
是否可以在使用 sys.path
访问另一个目录中的 Python 脚本时不必使用 full/explicit 或绝对文件路径,而是仅提供模块文件结构的本地目录路径?
目前,我的目录结构如下:
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
文件所在的整个文件路径,但显然这对尝试安装该模块的人不起作用,因为(显然)无法预料用户系统上的文件路径。
我的问题:有没有一种方法可以导入 userinfo.py
文件(位于 /bin
文件夹中)而无需整个系统文件路径(一直到/Users
) ?换句话说,我只想拥有类似的东西:
import sys
sys.path.insert(0, 'MyModule/bin')
import userinfo
但我知道这行不通。
您可以对当前工作目录使用点 (./
) 符号来建立相对路径。
例如:
(syspathinsert)macbook:syspathinsert joeyoung$ pwd
/Users/joeyoung/web/Whosebug/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