我做了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
,如下所示:
>>>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:
如您所见,文件路径的前半部分位于$PYTHONPATH
,后半部分作为open()
函数的参数。为什么不起作用?我应该改变什么?
当我从/home/User/folder/test
(导出路径)运行python并尝试打开文件时 - 它工作正常。
答案 0 :(得分:5)
Open是相对于当前目录的,不使用PYTHONPATH。当前目录默认为在命令行上启动python时的任何内容。
您可以使用os.chdir
更改当前目录答案 1 :(得分:2)
如果我正确地阅读了您的问题,您希望您的数据位于相对于模块的位置。如果是这种情况,您可以使用:
full_path = os.path.join(os.path.split(__file__)[:-1]+['pics','text','text.txt'])
__file__
是模块的路径(包括modulename.py
)。所以我拆分了这条路径,拉开了modulename.py
([:-1]
)并通过os.path.join
答案 2 :(得分:0)
每当我想要导入脚本时,相对于当前并且不使用包,我通常使用
sys.path = [os.path.dirname(__file__) + "/../another_dir"] + sys.path