如何定制python导入?

时间:2016-10-09 06:34:22

标签: python-3.x

有没有办法在Python中为import语句设置自定义行为?怎么样? E.g:

import "https://github.com/kennethreitz/requests"
import requests@2.11.1
import requests@7322a09379565bbeba9bb40000b41eab8856352e

或者,如果这是不可能的......可以通过函数调用以标准方式实现吗?怎么样? E.g:

import gitloader
repo = gitloader.repo("https://github.com/kennethreitz/requests")
requests = repo.from_commit("7322a09379565bbeba9bb40000b41eab8856352e")

为什么我想这样做有两个原因。第一个原因是便利(Golang风格导入)。第二个原因是我需要对项目的插件模块进行加密验证。我正在使用Python 3.x

1 个答案:

答案 0 :(得分:0)

您实际要问的是导入步骤的自定义。这可以通过PEP 302实现,这为定制带来了某些钩子。

PEP目前不是您应该了解导入工作原理的来源;相反,请查看documentation for the import statement以供参考。有it states

  

Python包含许多默认查找程序和导入程序。第一个知道如何定位内置模块,第二个知道如何定位冻结模块。第三个默认查找器搜索模块的导入路径。导入路径是可以命名文件系统路径或zip文件的位置列表。 它还可以扩展为搜索任何可定位的资源,例如由URL标识的资源。

     

导入机制是可扩展的,因此可以添加新的查找程序以扩展模块搜索的范围和范围

简而言之,您需要定义适当的查找器(以查找您正在寻找的模块)以及用于加载这些模块的适当加载程序。