代码之家  ›  专栏  ›  技术社区  ›  ravi

如何在开发Python包时缩短import语句?

  •  1
  • ravi  · 技术社区  · 7 年前

    我正在设计一个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

    你能建议我如何重新配置这个包,以克服上述问题吗?请注意,我使用的是Python2.7(如果有必要的话)!

    2 回复  |  直到 7 年前
        1
  •  2
  •   return42    7 年前

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

    class Power:
       On = True 
    

    在同一个软件包中有一个android.py:

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

    __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\u py这个软件包不太满意。也说出它的名字 android android.py 打包 android/android.py . 用于 在上面的例子中,它应该起作用。

        2
  •  -1
  •   user287474    7 年前

    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")
    

    初始化

    只需更改示例中的文件夹结构,就可以直接调用 import funniest

    我相信你可以把同样的东西用在你的包裹上。