在Python中导入包时发生冲突

时间:2016-05-30 09:50:43

标签: python

我有两个项目,每个项目都有一个Python文件夹,其中我有另一个名为lib_py的文件夹,其中包含一些共享库Python文件。 请注意,即使lib_py是一组共享库,每个项目都可以具有较旧/较新版本的lib_py文件(基于其需要)。这就是为什么每个项目都需要拥有lib_py文件夹的原因。层次结构如下:

Project1
  Python
    lib_py
      __init__.py
      example.py
    main
      main.py
Project2
  Python
    lib_py
      __init__.py
      example.py
    main
      main.py

在两个项目的main.py中,example.py导入如下:

from lib_py.example import x

为了使每个main.py都能访问example.py,我在sys.paths中添加了两个以下路径:

D:\Project1\Python
D:\Project2\Python

问题发生在这里:来自Project1的main.py被调用,使用了良好的example.py但是在从Project1调用main.py之后,调用了Project2的main.py,再次调用了Project1中的example.py虽然我希望使用Project2中的example.py。

有没有办法确定哪个包应该使用哪个包含相同名称? 您认为还有其他解决方案吗? (不改变课程的目录层次结构)

由于

2 个答案:

答案 0 :(得分:2)

你可以做这样的事情

参考this answer

from os import path
import sys
sys.path.append(path.abspath('../Foo'))
sys.path.append(path.abspath('../Foo2'))


from Project1.python.lib_py import example  as proj1ex
from Project2.python.lib_py import example  as proj2ex

答案 1 :(得分:1)

只需从项目级别提供路径,并使用其他名称将其别名

from project1.python.lib_py import example as ex1
from project2.python.lib_py import example as ex2

并开始使用ex1和ex2