开发 Python 包时如何缩短导入语句?



我正在设计一个Python包。请参阅下面的项目结构-

android_py
├── README.md
├── setup.py
└── android_py
├── __init__.py
├── options.py
└── android.py

以下是setup.py的内容——

from setuptools import setup, find_packages
setup(name='android_py',
version='0.1',
description='The description goes here',
url='http://github.com/example_user/android_py',
author='Bob',
author_email='abc@example.com',
license='MIT',
packages=find_packages(),
zip_safe=False,
)

上述软件包可以通过使用python setup.py成功安装。但是,为了使用此包,我需要编写长import语句,如下所示-

from android_py.android import Android
from android_py.options import Power
my_robot = Android()
my_robot.set_power(Power.On)

如您所见,存在以下两个问题-

  1. 第一次导入,即from android_py.android import Android太长,而且用户不友好,因为它很难记住。我认为像import android这样更短的东西要好得多。
  2. 第二次导入,即from android_py.options import Power很麻烦。它应该在第一次导入时自动导入。

您能否建议我如何重新配置此软件包以克服上述问题?请注意,我使用的是Python 2.7(如果这很重要的话(!

除了我的评论之外,我将尝试举一个简短的例子。假设您有 power.py:

class Power:
On = True 

并在同一包中 android.py:

from . import power
class Android:
Power = power.Power

在android_py包中__init__.py

from .android import Android

现在,从外面的 app.py,main.py 或任何你可以:

from android_py import Android
my_robot = Android()
my_robot.set_power(my_robot.Power.On)

顺便说一句:我对包名称android_py不是很满意。命名也android,在包android中有一个android.py是没有问题的。或者用路径名解释:有android/android.py没问题。使用android.py中使用的相对导入.和上例中的__init__.py,它应该可以工作。

这是你要找的吗? https://python-packaging.readthedocs.io/en/latest/everything.html

编辑:使用链接中的代码,我能够做到这一点:

import funniest.funniest
import types
print(dir(funniest))
print([getattr(funniest, a) for a in dir(funniest)
if isinstance(getattr(funniest, a), types.FunctionType)])
print(funniest.funniest.joke())
print("works")

这在 ./python-packaging-master/funniest/funniest/init中调用 joke(.py

只需更改示例中的文件夹结构,您就可以简单地调用import funniest

我相信您可以将同样的东西应用于您的包裹。

最新更新