open()找不到相对于PYTHONPATH的给定path的文件

我没有export PYTHONPATH=$PYTHONPATH:/home/User/folder/test 。 然后,我在/home/User/运行python,并检查了sys.path – 这是正确的。

 >>> import sys >>> sys.path ['', '/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg', '/home/User', '/home/User/folder/test','/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages'] 

然后我试图打开一个文件/ /home/User/folder/test/pics/text/text.txt文件夹/ /home/User/folder/test/pics/text/text.txt像这样:

 >>>file = open('pics/text/text.txt','r') Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: [Errno 2] No such file or directory: 

正如你所看到的,文件path的前半部分在$PYTHONPATH ,后半部分作为open()函数的参数。 为什么不起作用? 我应该改变什么?

当我从/home/User/folder/test (导出的path)运行python,并试图打开文件 – 它的工作。

打开是相对于当前目录,不使用PYTHONPATH。 当前目录默认为在命令行启动python时的内容。

您可以使用os.chdir来更改当前目录

如果我正确地阅读你的问题,你希望你的数据驻留在相对于模块的位置。 如果是这样的话,你可以使用:

 full_path = os.path.join(os.path.split(__file__)[:-1]+['pics','text','text.txt']) 

__file__是模块的路径(包括modulename.py )。 所以我分开这个路径,拉出modulename.py[:-1] ),并通过os.path.join添加相对路径的其余部分

每当我想导入一个脚本,相对于当前和不使用包,我通常使用

 sys.path = [os.path.dirname(__file__) + "/../another_dir"] + sys.path