在__init __。py

时间:2018-06-28 18:24:29

标签: python module global decorator

编辑:已解决!解决方案位于本文的底部。 tl; dr:我应该一直使用相对导入,并使用正确的标志启动python。

所以我试图适应一些python东西(版本2.7.3,这是工作PC上安装的东西),并且我有一个小项目来教我一些python东西。我已经定义了一个模块,如下所示:

  

curses_graphics
   | __init__.py
   | graphicsobject.py
   | go_test.py

(后面的代码) 我已经在__init__中定义了一个装饰器,并且试图在我要附加装饰器的graphicsobject.py类的类中定义的方法上使用它,并在go_test中测试其功能。 / p>

当我运行go_test时(只是在目录中并调用“ python go_test.py”),我收到未找到软件包的错误。如果将go_test重命名为__main__.py并尝试从其父目录运行该包,也会发生同样的情况。如果我尝试在不导入软件包的情况下运行go_test,那么它将无法识别我的功能。

如何从同一包中引用__init__.py中定义的函数?在包中尝试导入是否错误?

谢谢!

__ init __。py:

import curses
import logging
#Define logging stuff
gLog = logging.getLogger("cg_log")
gLog.basicConfig(filename="log.log", level=logging.DEBUG)

# Logging decorators for this library

def debug_announce(module_func):
    log=logging.getLogger("cg_log")
    log.info("Curses Graphics Lib:Entering function:"+module_func.__name__)
    module_func()
    log.info("Curses Graphics Lib:Left function:"+module_func.__name__)

go_test.py

@debug_announce
def logTester():
    print("A test method")

logTester()

logger.debug("Curses initialization")
screen=curses.initscr()
curses.start_color()
screen.keypad(True)

logger.debug("Initializing a green block filled with red '.'s")
block = GraphicsOBject.blankline(0, 0, 3, curses.COLOR_GREEN, curses.COLOR_RED, 20, '.')
logger.debug("Drawing the block.")
block.draw(screen)

logger.debug("Pausing execution with a getch")
screen.getch()

logger.debug("Cleaning up curses")
screen.keypad(False)
curses.endwin()
os.system('stty sane')

我可以包含graphicsobject.py,尽管我怀疑这会很混乱,因为问题发生在go_test.py的第一行

谢谢大家!

编辑: 我附上所报告错误的摘要。在第一个错误中,我添加了“ from curses_graphics import debug_announce”,第二个代码中没有该行。

Errors with and without debug_announce import

编辑: 经过进一步的搜索,我找到了相对进口。对于遇到我问题的任何人,您都可以使用它们来导入您自己的模块中定义的内容。就我而言,我在go_test.py文件的开头附加了“ from。import debug_announce”。我尝试运行它,并收到错误消息“尝试以非包形式进行相对导入”。

一些进一步的搜索使我想到了这个问题: How to fix "Attempted relative import in non-package" even with __init__.py

告诉我,它不是试图以程序包形式运行该程序。这意味着“ __init__.py”从未运行过,因为该软件包不会被导入。此外,由于我内部,因此尝试导入该软件包(即“ import curses_graphics”)会导致它在curses_graphics ...中搜索curses_graphics。

要正确运行此程序,如链接的问题所示,我需要转到curses_graphics的父目录,并使用“ python -m curses_graphics.go_test”执行该目录。这将使用其init等运行程序包,并运行go_test脚本。

(而且,FWIW,我的代码还有其他问题。请不要以此为例来说明如何使用curses或loging:P)

0 个答案:

没有答案