具有重叠包结构的PYTHONPATH shell
我在windows XP上的PythonPath有问题,我想知道我是否做错了什么 假设我有一个项目(用Pydev创建),它有一个具有重叠包结构的PYTHONPATH shell,python,pythonpath,Python,Pythonpath,我在windows XP上的PythonPath有问题,我想知道我是否做错了什么 假设我有一个项目(用Pydev创建),它有一个src目录。在src下,我有一个名为common的包,其中有一个名为service.py的类模块,类名为service 现在假设我有另一个项目(也是用Pydev创建的),它有一个src目录和一个公共包。在公共包中,我有一个脚本,client.py,用于导入服务 换句话说,两个独立的磁盘位置,但包是相同的 我注意到,即使我将我的PYTHONPATH设置为包含两个src目录
src
目录。在src
下,我有一个名为common
的包,其中有一个名为service.py的类模块,类名为service
现在假设我有另一个项目(也是用Pydev创建的),它有一个src
目录和一个公共包。在公共包中,我有一个脚本,client.py
,用于导入服务
换句话说,两个独立的磁盘位置,但包是相同的
我注意到,即使我将我的PYTHONPATH
设置为包含两个src目录,导入也会失败,除非两个文件都在同一目录中。我发现了可怕的“找不到”模块
我是否误解了python解析模块名的方式?我已经习惯了Java及其类路径地狱。我认为在Python中,最好通过为每个包提供唯一的名称来避免这个问题。不要同时命名两个软件包common
。然后,您可以使用以下内容导入这两个
import common1.service as cs
import common2.client as cc
如果您尝试这样导入:
import src.common.service
Python将在Python路径上查找名为“src”的目录(或egg等)。一旦找到“SRC”,它将不会考虑另一个。如果第一个“src”中没有公共和服务,那么即使路径中的另一个“src”目录中有这些东西,您也会得到一个ImportError。如果您确实必须有这样的拆分包,请阅读模块级属性uuuu path\uu
简言之,将其中一个“src”目录作为主目录,并为其指定一个_init__u; py.py,将其他“src”的路径附加到_path__;列表中。Python现在在查找“src”的子模块时会同时查找这两个位置
但我真的不推荐长期使用。它有点脆,如果你移动东西就会断裂 我不得不说,这是一种奇怪的行为。在Java中,类路径被认为是将要研究的所有目录的析取。