如何让Python项目默认导入browser而非brython.browser?
我希望为Brython创建独立可安装的.pyi类型包。主项目中的Brython文件myfile.py要求必须以from browser import document开头导入模块。
我的可安装项目结构如下:
../brython-signatures/src/ └── brython ├── browser │ ├── document.pyi │ └── __init__.py └── __init__.py
通过pip install -e ~/Projects/brython-signatures测试安装后,只能用from brython.browser import document导入模块。因特定原因无法修改现有包结构,请问有没有办法让主应用默认使用from browser import document而非from brython.browser import document?我曾尝试添加package-dir配置:
[package-dir] browser="src/brython/browser"
但未生效。
方法1:新增顶层browser包作为别名
在项目src目录下新建browser目录,创建__init__.py文件,内容如下:
# src/browser/__init__.py from brython.browser import * from brython.browser import __all__
修改打包配置(以setup.cfg为例),确保识别到新增的顶层包:
[metadata] name = brython-signatures [options] package_dir = = src packages = find: include_package_data = true
安装后,browser将作为顶层包存在,可直接使用from browser import document,原有from brython.browser import document的写法也依然有效。
方法2:通过sys.modules注册顶层模块
若不想新增目录,可修改src/brython/__init__.py,添加以下代码:
# src/brython/__init__.py import sys from . import browser sys.modules['browser'] = browser
此方法要求主项目先导入brython(如import brython),之后browser模块会被注册到全局,即可直接使用from browser import document。但如果主项目未提前导入brython,此方法会失效,因此更推荐第一种方案。
内容的提问来源于stack exchange,提问作者SteveJ

