带有入口点控制台脚本的Python包分发 [英] Python package distribution with entry_point console_script

查看:0
本文介绍了带有入口点控制台脚本的Python包分发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在准备部署具有以下布局的Python包:

MyPackage/
  setup.py
  MyPackage/
    __init__.py
    __main__.py
    lib/
      __init__.py
      utils.py
    db/
      __init__.py
      db1.py
      db2.py 
    tasks/
      __init__.py
      something.py

setup.py包含:

setup(name = MyPackage,
      ...
      packages = find_packages(),
      include_package_data = True,
      entry_points = {"console_scripts" : [
          "do_something = MyPackage.__main__:main"
      ]})

__main__.py包含:

import tasks.something as something

something.my_function()

something模块包含:

import db.db1 as db1
import db.db2 as db2

def my_function():
  db1.this_func(...)
  db2.that_func(...)

db1包含:

import sqlalchemy
import lib.utils as utils

def this_func(...):
  sqlalchemy.create_engine(...)

db2包含:

import sqlalchemy
import lib.utils as utils

def that_func(...):
  sqlalchemy.create_engine(...)
当通过从已安装的site-packages目录执行来运行时,__main__.py将顺利完成。如果我在交互会话中执行import MyPackage.tasks.something as something,该模块也会在有问题的情况下导入。但是,当我运行console_scripts脚本do_something时,收到ModuleNotFound错误。

是什么原因导致我的控制台脚本找不到子包?

提前谢谢!

推荐答案

按照以下示例更改导入:

__main__.py

import tasks.something as something

# to:

import MyPackage.tasks.something as something

# or

from .tasks import something as something

这篇关于带有入口点控制台脚本的Python包分发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆