我没有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