1

我做到了export PYTHONPATH=$PYTHONPATH:/home/User/folder/test。然后我在进去的时候运行了python/home/User/并检查了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

>>>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:

如您所见,文件路径的前半部分在 in 中$PYTHONPATH,后半部分作为open()函数的参数给出。为什么它不起作用?我应该改变什么?

当我从/home/User/folder/test(导出路径)运行 python 并尝试打开文件时 - 它起作用了。

4

3 回答 3

7

Open 是相对于当前目录的,不使用 PYTHONPATH。当前目录默认为在命令行上启动 python 时的任何目录。

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

于 2012-09-12T15:42:09.043 回答
2

如果我正确阅读了您的问题,您希望您的数据位于相对于模块的位置。如果是这种情况,您可以使用:

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

__file__是模块的路径(包括modulename.py)。因此,我拆分了该路径,拉出modulename.py( [:-1]) 并通过添加相对路径的其余部分os.path.join

于 2012-09-12T15:42:21.963 回答
0

每当我想导入相对于当前的脚本并且不使用包时,我通常使用

sys.path = [os.path.dirname(__file__) + "/../another_dir"] + sys.path
于 2012-09-12T15:56:24.420 回答