首页 > 解决方案 > Python 3.6,导入同名的本地 vs 3rd 方包

问题描述

我已经进行了研究,但找不到明确的解决方案...如果我有同名的包,如何导入第 3 方包?

例子:

项目树如下所示:

├── Pipfile
├── Pipfile.lock
├── analytics
│   ├── __init__.py
│   └── client.py
└── main.py

analytics/client.py的内容很简单:

def identify():
    print("local analytics")

analytics/init.py是单行的:

from .client import  identify

主文件

import analytics


analytics.identify();

如果我运行python main.py它会将本地分析写入输出。没关系。

但是,如果我使用名称分析安装 3rd 方包,例如

pipenv install analytics-python( https://segment.com/docs/sources/server/python/ )

并运行python main.py,它将再次将本地分析写入输出。

如何从 3rd 方包运行代码?

标签: python-3.xpython-importsegment-io

解决方案


这里的重点是您__init__.py作为脚本运行。当您运行脚本时,Python 会将包含该脚本的目录添加到 的前面sys.path,这会全局影响所有后续导入。

因此,为了使用第三方模块,您必须重命名本地分析目录或删除__init__.py文件,以便 python 不会在sys.path.


推荐阅读