我有以下目录结构:
src/
|- setup.py
|- prettylogger
|- __init__.py
|- core.py
|- transgression
|- __init__.py
|- core.py
我遇到的问题是它没有正确设置。我想要它要做的是安装两个软件包 - prettylogger 和 transgression ,以便可以独立导入 prettylogger 违规,反之亦然,使用from prettylogger.core import PrettyLogger
(PrettyLogger
类包含在prettylogger/core.py
中。
我在这篇文章之后尝试过setup.py文件,但收效甚微。它似乎将.egg文件安装到/Library/Python/2.7/site-packages
(我在Mac上)用于漂亮记录和违规,但当我在命令行运行:transgression
时,我得到:
File "/usr/local/bin/transgression", line 8, in <module>
load_entry_point('transgression==0.0.1', 'console_scripts', 'transgression')()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 318, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 2221, in load_entry_point
return ep.load()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 1954, in load
entry = __import__(self.module_name, globals(),globals(), ['__name__'])
File "build/bdist.macosx-10.9-intel/egg/transgression/core.py", line 2, in <module>
File "build/bdist.macosx-10.9-intel/egg/configurator/core.py", line 16, in <module>
ImportError: No module named core
我在transgression / transgression-test.py中有一个测试套件,当我cd到该目录并运行它时,我得到:
Traceback (most recent call last):
File "build/bdist.macosx-10.9-intel/egg/transgression/core.py", line 16, in <module>
from prettylogger.core import PrettyLogger
ImportError: No module named core
所以,它似乎无法找到这个模块。我刚刚将模块从prettylogger.py重命名为core.py,因为我希望能够使用:from prettylogger.core import PrettyLogger
而不是from prettylogger.prettylogger import PrettyLogger
。
Setup.py :
from setuptools import setup
import os
setup(name='prettylogger',
version='0.0.1',
description='A logging utility package designed for command line use',
py_modules=['prettylogger.core'],
# Note: I also have tried packages=['prettylogger'], here
install_requires=['ansicolors']
)
setup(name='transgression',
version='0.0.1',
description='Generic binary regression finding utility',
packages=['transgression'],
entry_points={ 'console_scripts': [
'transgression = transgression.core:main'] },
install_requires=['prettylogger']
)
答案 0 :(得分:2)
您的包目录中是否有__init__.py
个文件? Python需要这个文件才能将目录及其内容重新定义为包(尽管我认为这可能在较新的Python 3.x版本中有所改变)。
__init__.py
文件可以为空,不需要任何其他内容。
答案 1 :(得分:0)
名为__init__.py
的文件用于将磁盘上的目录标记为Python包目录。
如果删除__init__.py
文件,Python将不再在该目录中查找子模块,因此导入模块的尝试将失败。
如果您有许多文件夹,请在每个文件夹中创建空__init__.py
文件。例如:
src/
|- __init__.py
|- setup.py
|- prettylogger
|- __init__.py
|- core.py
|- transgression
|- __init__.py
|- core.py