我有:
project
|--__init__.py
|--...
+--package1
| |--__init__.py
| |--...
+--dbs
|--...
project
用户要导入和使用的包的集合在哪里。这些名称只是一个例子。
现在,某些文件project/package1/
需要访问 中的某些文件project/dbs/
,但是根据用户放置project
文件夹的位置以及他或她从哪里导入它,path/to/project/dbs/file
是不一样的。由于这个问题和其他目的,我认为我应该将一个变量projectroot
定义为项目的根,相对于它的导入位置。例如:
如果用户拥有~/Desktop/project
并从那时开始导入它,~/
那么projectroot
将是Desktop/project
,并且path/to/project/dbs/file
将是"%s/dbs/file" % (projectroot)
。这真的需要吗?如果是这样,最好的方法是什么?
我尝试使用它并project/pathtfinder.py
用作project/__init__.py
import pathfinder
projectroot=pathfinder.module_path()
import package1
但是当我跑步时,import project
我得到
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "project/__init__.py", line 3, in <module>
import package1
File "project/package1/__init__.py", line 5, in <module>
db = sqlite3.connect("%s/dbs/main.db" % projectroot)
NameError: name 'projectroot' is not defined
如果print projectroot
在定义它之后使用,我会得到Desktop/project
,正如预期的那样。