从“错误”命名的目录导入包

impala的Python项目详细描述


Author:Roman Neuhauser
Contact:neuhauser@sigpipe.cz
Copyright:This document is in the public domain.

概述

impala是一个PEP302协议(sys.meta_pathhook,用于import 语句)实现允许用户导入包和 来自任意命名目录和文件的模块。

动机

  • 发展中的舒适与自由
  • 无需安装即可使用已安装的接口

假设我正在开发一个名为pyoneer的python包。我想 按如下方式排列源代码:

README.txt
src/
  __init__.py
  some.py
  more.py
tests/
  ...

问题是,如何在测试文件中import pyoneer。 (<workdir>/tests/...)并加载<workdir>/src/__init__.py? 默认的import机制要求包以同名形式存在 目录。

你问,有什么好大惊小怪的?我应该简单地重命名src 目录到pyoneer或者src/pyoneer,不是吗?

实际上,这是可以容忍的,至少在顶级软件包中是这样。 但是,如果我正在做一些可以作为 foo.bar.baz安装后,我当然不想涉水 通过荒凉的src/foo/bar获得源代码。

或许我可以在测试中import src?嗯,测试是 文档的一种形式,对于doctest更是如此。“适当的” 文档(readme.txt等)也可以包含 应该可以在不安装切口的情况下进行验证。

impala去救援!

from os.path import abspath, dirname
import impala

root = abspath(dirname(__file__))

impala.register(dict(
  pyoneer = '%s/src' % root
))

import pyoneer

说明

impala.register(aliases)

aliases是来自完全限定模块/包的dict映射 要从中加载的路径的名称。从路径导入包p/a/b/caliases必须包含具有关联值的键p/a/b/c/a/b/c/__init__.py必须是有效的包条目 要点。要从路径/f/g/h.py导入模块m,必须aliases。 包括键m和关联的值/f/g/h.py

示例:

from os.path import abspath, dirname
import impala

r = dirname(abspath(__file__))

impala.register({
  'p': '%s/a/b/c' % r,
  'p.q': '%s/f/g/h' % r,
  'p.q.m': '%s/k.py' % r,
})

import p
import p.q
import p.q.m

许可证

py impala分布在MIT license下。见LICENSE 详细情况。

安装

使用来自PyPIpip,python包索引:

pip install impala

checkout或提取的tarball:

python setup.py install

开发

源代码和问题跟踪程序位于github:

https://github.com/roman-neuhauser/py-impala

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java岩石、布、剪刀程序,带文件输入   java迭代Hashmap中的值列表   数组不能正确循环   JavaHibernate:对于一个遥远的惰性依赖,有一个渴望的获取者吗?   交通阻塞下的java车辆路径选择   如何在java中创建布尔方法来检查添加到具有特定索引的arraylist的对象   java Tomcat配置文件/上下文xml似乎已经崩溃了。请确保它是可分析和有效的。有关详细信息,请参阅服务器日志   为什么坐标有时相等,有时不相等?   java libgdx CameraInputController过于敏感,平移开始得太早   将C++排序函数移植到java   java应该是十进制的   swing Java JFrame中的所有内容都不可见   java使用数组中除一个元素以外的所有元素   从子类运行构造函数的Java