我是一名试图掌握Pythog的Java开发人员。我正在研究一个由三个组成部分组成的项目。服务器,客户端和公共部分。 (使用eclipse)
在公共包中,我创建了一个如下所示的模块:
'''
Created on 4 Jan 2014
@author: christian
'''
import logging
def logDebug(msg):
logging.log(logging.DEBUG, msg)
def logInfo(msg):
logging.log(logging.INFO, msg)
def logWarning(msg):
logging.log(logging.WARNING, msg)
def logError(msg):
logging.log(logging.ERROR, msg)
def logCritical(msg):
logging.log(logging.CRITICAL, msg)
这很简单,只是一个测试。我为这个项目设置了一个setyp.py并创建了一个egg-File。 这个egg-Fille我在客户端项目中引用。看起来像这样:
import logging
from de.christianae.main.common import mylogging
def startUp():
logging.basicConfig(filename="client.log", level=logging.DEBUG)
mylogging.logCritical("Test Critical")
if __name__ == '__main__':
startUp()
我想在这里做的是设置python loggin机制,而不是使用我自己的模块来避免总是达到日志级别。
当我尝试运行该代码时,我得到以下异常:
pydev debugger: starting
Traceback (most recent call last):
File "/opt/eclipse/plugins/org.python.pydev_3.2.0.201312292215/pysrc/pydevd.py", line 1706, in <module>
debugger.run(setup['file'], None, None)
File "/opt/eclipse/plugins/org.python.pydev_3.2.0.201312292215/pysrc/pydevd.py", line 1324, in run
pydev_imports.execfile(file, globals, locals) #execute the script
File "/home/christian/repository/synctoolclient/trunk/src/de/christianae/main/client/SyncToolClie nt.py", line 7, in <module>
from de.christianae.main.common import mylogging
ImportError: No module named common
我做错了什么?有没有更好的方法来完成像Java中的.jars那样的事情?
答案 0 :(得分:1)
问题在于他的鸡蛋目录是这样的:
| de/
| __init__.py
| christianae/
| __init__.py
| main/
| __init__.py
| common/
| __init__.py
| code.py
当他使用设置工具制作鸡蛋时,它只包含来自__init__.py
的{{1}},因此导入无效,因为Python没有看到c/
作为一个模块,不会在树中更深入。
解决方法:展平为源de
。因为他来自Java背景,所以他拥有所有这些目录是很自然的,但显然common/*.py
和setuptools
不喜欢这样。