"没有名为'核心'"重命名模块后

时间:2014-04-15 00:13:54

标签: python setuptools

我有以下目录结构:

src/
  |- setup.py
  |- prettylogger
    |- __init__.py
    |- core.py
  |- transgression
    |- __init__.py
    |- core.py

我遇到的问题是它没有正确设置。我想要它要做的是安装两个软件包 - prettylogger transgression ,以便可以独立导入 prettylogger 违规,反之亦然,使用from prettylogger.core import PrettyLoggerPrettyLogger类包含在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']                         
)                                                                               

2 个答案:

答案 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