我是python编程和尝试学习名称空间包的新手。
我在下面的2个目录path1和path2中具有名称空间包10
mitnik
Poulsen
Tanner
Stallman
Ritchie
Baran
Spafford
Farmer
Venema
Linus
mitnik
300 3
Poulsen
Tanner
Baran
Poulsen
1000 1
Tanner
Spafford
2000 9
mitnik
Poulsen
Tanner
Stallman
Ritchie
Baran
Farmer
Venema
Linus
Tanner
-
split_farm
然后我将路径1和路径2扩展到sys.path中,如下所示-
$ tree .
.
├── path1
│ └── split_farm
│ ├── common.py
│ ├── cow.py
│ ├── __init__.py
│ ├── ox.py
│ └── __pycache__
│ └── __init__.cpython-35.pyc
└── path2
└── split_farm
├── chicken.py
├── __init__.py
├── __pycache__
│ └── __init__.cpython-35.pyc
└── turkey.py
6 directories, 9 files
如上所示,仅导入了“ path1 / split_farm”,但未导入“ path2 / split_farm”。
我的代码在github here上。
我该如何解决?
答案 0 :(得分:0)
我认为没有一种简单的方法可以完成您的工作。
基本上,Python会通过依次在PYTHONPATH
环境变量包含的每个目录中查找模块来导入模块。找到匹配项后,它将在此处停止。
在这种情况下,它将在split_farm
中找到path1
,将其导入并在那里停止。它将把split_farm
中的path2
视为完全不同的模块,这将被视为命名空间冲突。
可能带有一堆自定义导入逻辑,并且可以解决加载的模块,但是我不建议这样做。
更惯用的方法是在父程序包中将两个程序包命名为不同的名称,或者将它们组合成一个程序包。