2016-05-30 82 views
0

我有两个项目,每个项目都有一个Python文件夹,其中有一个名为lib_py的文件夹和一些共享库Python文件。 请注意,即使lib_py是一组共享库,每个项目都可以具有较旧/较新版本的lib_py文件(基于其需求)。所以这就是为什么每个项目都需要有lib_py文件夹。该层次是像以下:在Python中导入包时发生冲突

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中的.py是ca lled,再次调用Project1中的example.py,但我期望使用Project2中的example.py。

如果找到几个具有相同名称的应用程序,有什么方法可以精确地确定应该使用哪个包? 您认为还有其他解决方案吗? (不改变的课程目录层次结构)

感谢

回答

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 
+0

同样的评论,我为Arun G编写的建议: 问题是我在这里描述的方案是非常简单的现实版本。事实上,Project1和Project2中的层次结构更复杂(大量的文件夹层次),每个项目中都有更多的文件夹。项目不仅仅是Python项目,而是C++。所以,如果我使用你的建议解决方案,首先我应该在很多文件夹中添加很多__init __.py,其次导入会更复杂,因为有很多层次。 –

+0

@pashashadkami,请检查编辑 – onkar

+0

而不是使用sys.path.append,您也可以将Project1和Project2的父目录添加到PYTHONPATH – Overdrivr

1

只要给从项目层面,与其他别名它的路径名称

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

并开始使用ex1和ex2

+0

问题是我在这里描述的方案是非常简单的现实版本。事实上,Project1和Project2中的层次结构更复杂(大量的文件夹层次),每个项目中都有更多的文件夹。项目不仅仅是Python项目,而是C++。所以,如果我使用你的建议解决方案,首先我应该在很多文件夹中添加很多__init __.py,其次导入会更复杂,因为有很多层次。 –

+0

不幸的。你需要明确提及它们。我的意思是所有的人! –

相关问题