1

我有一个项目设置如下所示:

基地项目

/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

4

3 回答 3

7

__init__.py在每个目录中创建一个包文件src。它们应包含以下两行。有关详细信息,请参阅此文档。此解决方案适用于 Python 2.6,是规范的解决方案。

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
于 2013-08-01T16:23:51.923 回答
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 的困惑。

于 2013-08-01T13:56:14.187 回答
-2

您需要在这些目录中有__init__.py文件,以使 python 将其视为包而不是普通目录。

请参阅讨论以了解有关init .py 文件的更多信息。

注意:我已经根据与查询海报的讨论删除了不相关的内容,从而编辑了我之前的答案。

于 2013-08-01T12:57:09.200 回答