我的项目设置如下:
基础项目
/some_disk/some_folder/
|-- project/
| |-- package/
| | |-- src/
| | | |-- file_a.py
| | | |-- file_b.py
扩展项目
/some_other_disk/some_folder/
|-- project/
| |-- package/
| | |-- src/
| | | |-- file_c.py
| | | |-- file_d.py
然后我有第三个项目,我希望能够同时使用mopdules file_a和file_c。
在第三个项目中,我已经像这样设置了我的Python路径
PYTHONPATH=$PYTHONPATH:/some_disk/some_folder:/some_other_disk/some_folder
然后,要导入文件,我在主模块中有这个:
import project.module.src.file_a
import project.module.src.file_c
但是,这只能让我能够导入其中一个模块,并且另一个模块上找不到模块错误。
我可以使用这个项目结构来完成这项工作吗?或者Python是否只会查看其中一个“主要”模块并考虑如果它不在那里就找不到子模块?
编辑:该项目使用Python 2.6
答案 0 :(得分:5)
在每个__init__.py
目录中创建一个包文件src
。它们应包含以下两行。有关详细信息,请参阅this documentation。此解决方案适用于Python 2.6,是规范解决方案。
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
答案 1 :(得分:0)
这将首先在当前目录/标准目录中进行python搜索,对于第二个,python将首先在标准目录之前搜索pathtofile_c。
import project.module.src.file_a #<--- here it searches some_disk first
sys.path.insert(0,'pathtofile_c') #<--- Changes your PYTHONPATH - inserts some_other_disk before standard directories
import project.module.src.file_c #<--- here it searches some_other_disk first
这应该可以解决python的困惑。
答案 2 :(得分:-2)
您需要在这些目录中包含 __ init __。py 文件,以便将python视为包而不是普通目录。
请参阅this讨论,详细了解 init .py文件。
注意:我根据与查询海报的讨论删除了不相关的内容,编辑了我以前的答案。