python3只有目录之一被导入名称空间包

时间:2019-07-01 03:26:28

标签: python python-3.x

我是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上。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

我认为没有一种简单的方法可以完成您的工作。

基本上,Python会通过依次在PYTHONPATH环境变量包含的每个目录中查找模块来导入模块。找到匹配项后,它将在此处停止。

在这种情况下,它将在split_farm中找到path1,将其导入并在那里停止。它将把split_farm中的path2视为完全不同的模块,这将被视为命名空间冲突。

可能带有一堆自定义导入逻辑,并且可以解决加载的模块,但是我不建议这样做。

更惯用的方法是在父程序包中将两个程序包命名为不同的名称,或者将它们组合成一个程序包。