Python 正在从sys.path中删除路径

Python 正在从sys.path中删除路径,python,Python,我有以下文件: test.py a/foo.py b/foo.py a/foo.py包含以下内容: x = 1 y = 2 import sys from pathlib import Path here = Path(__file__).parent sys.path.append(str(here / 'a')) from foo import x sys.path.remove(str(here / 'a')) sys.path.append(str(here / 'b')) f

我有以下文件:

test.py
a/foo.py
b/foo.py
a/foo.py
包含以下内容:

x = 1
y = 2
import sys
from pathlib import Path

here = Path(__file__).parent

sys.path.append(str(here / 'a'))
from foo import x
sys.path.remove(str(here / 'a'))
sys.path.append(str(here / 'b'))
from foo import y
b/foo.py
包含以下内容:

x = 1
y = 2
import sys
from pathlib import Path

here = Path(__file__).parent

sys.path.append(str(here / 'a'))
from foo import x
sys.path.remove(str(here / 'a'))
sys.path.append(str(here / 'b'))
from foo import y
test.py
包含以下内容:

x = 1
y = 2
import sys
from pathlib import Path

here = Path(__file__).parent

sys.path.append(str(here / 'a'))
from foo import x
sys.path.remove(str(here / 'a'))
sys.path.append(str(here / 'b'))
from foo import y
这在最后一行失败,原因是:

$ python3 test.py
Traceback (most recent call last):
  File "test.py", line 10, in <module>
    from foo import y
ImportError: cannot import name 'y' from 'foo' (a/foo.py)
$python3 test.py
回溯(最近一次呼叫最后一次):
文件“test.py”,第10行,在
来自foo import y
ImportError:无法从“foo”(a/foo.py)导入名称“y”
请注意,它仍在尝试从
a/foo.py
导入,尽管
a/
已从
sys.path
中删除,并在其位置添加了
b/

是否有方法同时导入
a/foo:x
b/foo:y

显然情况并不理想,但我正在尝试合并两个碰巧发生名称冲突的库。我们非常感谢您提出的任何处理建议


我正在运行python 3.8.6。Python 2.7产生了非常相似的结果(显然是为了避免pathlib而修改的)。

pip
不允许名称冲突,因此我假设这些是本地库。您已经使用名称空间将它们分隔开;您可以尝试从当前目录导入它们,并尝试从a.foo import x导入
,从b.foo import y导入
,我想问题在于cache@Flair-这显然适用于上述简单的情况。当然,实际情况更为复杂。所涉及的库不适合以这种方式命名(它们假设自己相对于PYTHONPATH的位置)。我认为应该可以使用
importlib
创建一些机器,以允许从除
sys.path
以外的路径集导入模块-我将玩一玩,看看我能想出什么。如果它比您描述的更复杂,那么我建议
importlib