从两个目录导入Python模块组件

从两个目录导入Python模块组件,python,python-3.x,python-import,Python,Python 3.x,Python Import,我使用的是Python3,但有一些小改动,我认为这也适用于Python2 我有一个包含一些普通Python模块文件的项目,以及一些必须从源代码构建的共享对象库 项目回购如下所示: python/ example/ foo.py src/ bar.c build/ # compiled, not checked in python/ example/ bar.so build/python/example/foo.

我使用的是Python3,但有一些小改动,我认为这也适用于Python2

我有一个包含一些普通Python模块文件的项目,以及一些必须从源代码构建的共享对象库

项目回购如下所示:

python/
    example/
        foo.py
src/
    bar.c

build/ # compiled, not checked in
    python/
        example/
            bar.so
build/python/example/foo.py -> ../../../python/foo.py
一些普通Python模块本身就很有用,因此我设置了
PYTHONPATH=Python
,然后可以
import example.foo
。有时我想
导入example.bar
,在这种情况下,我构建
bar.so

但是现在我遇到了一个问题,因为
PYTHONPATH=python:build/python
不起作用,因为一旦python找到
python/example
,它就不会查看
build/python/example

我希望能够告诉Python,这个模块在两个目录中有组件,如果一个目录中的导入失败,它应该在另一个目录中查找。这可能吗,或者你有其他建议吗?我试图避免创建一堆这样的符号链接:

python/
    example/
        foo.py
src/
    bar.c

build/ # compiled, not checked in
    python/
        example/
            bar.so
build/python/example/foo.py -> ../../../python/foo.py

也许您可以将这些路径附加到
sys.path
?也许可以更改PYTHONPATH中路径的顺序?@Chris\u Rands:
sys.path
的操作与这里的
PYTHONPATH
完全相同。没用……我刚才试过。@HoriaComan:当然,我可以改变顺序。然后我可以
导入条形图
,而不是
导入foo
。我不可能同时让两者都工作。我想我不久前也遇到了同样的问题,在一个类似的设置中。我认为这个问题无法解决,因为Python希望模块只存在于一个地方,而您要求它存在于两个地方。在我的例子中,因为我处理的是自动生成的代码,所以我只是为该代码添加了一个包装器模块。您可以添加一个build/python/native包,其中包含所有已编译的内容,然后将其作为native.example.bar导入。然后,您可以在Python中添加一个存根模块,它只加载本机内容并导出名称,因此人们仍然可以使用example.bar。也许您可以将这些路径附加到
sys.path
?也许可以更改PYTHONPATH中路径的顺序?@Chris_Rands:
sys.path
与这里的
PYTHONPATH
完全相同。没用……我刚才试过。@HoriaComan:当然,我可以改变顺序。然后我可以
导入条形图
,而不是
导入foo
。我不可能同时让两者都工作。我想我不久前也遇到了同样的问题,在一个类似的设置中。我认为这个问题无法解决,因为Python希望模块只存在于一个地方,而您要求它存在于两个地方。在我的例子中,因为我处理的是自动生成的代码,所以我只是为该代码添加了一个包装器模块。您可以添加一个build/python/native包,其中包含所有已编译的内容,然后将其作为native.example.bar导入。然后,您可以在Python中添加一个存根模块,它只加载本机内容并导出名称,因此人们仍然可以使用example.bar