Puede usar el siguiente método de la clase QgsProject para recuperar la ruta al archivo del proyecto:
from qgis.core import *
prjpath = QgsProject.instance().fileName()
Si no hay un proyecto cargado, o el proyecto actual aún no se ha guardado, esto devolverá un QString vacío:
PyQt4.QtCore.QString(u'')
Puede convertir la ruta del archivo del proyecto a una cadena Python Unicode (si es necesario) con:
unicode(prjpath)
Sin embargo, si tiene la intención de que su complemento sea multiplataforma, es mejor que no trabaje con la ruta del archivo como una cadena en Python, sino que aproveche la excelente clase QFileInfo de Qt :
from PyQt4.QtCore import *
from qgis.core import *
prjfi = QFileInfo(QgsProject.instance().fileName())
prjfi.absolutePath() # what you are probably looking for
La clase QFileInfo (junto con QFile y QDir ) manejará muchos problemas del sistema de archivos multiplataforma para usted e incluirá métodos que de otro modo se distribuirían en más clases de Python.
QgsProject.instance().homePath()
para obtener el camino directamente