python setup.py安装剥离__init__.py

时间:2014-01-01 16:31:23

标签: python setup.py

也许这是我正在做的蠢事,或者我可能需要在setup.py做一些事情,或者这可能是一个错误。

Python 2.6 Django 1.6

这是一款带有多个子应用的可重复使用的django应用。与django相关的是错误。当我尝试启用子应用程序时,django无法找到它们。它无法找到它们的原因是因为setup.py在安装期间删除了__init__.py。当我在安装位置手动添加它时,没关系。

app文件夹和相关文件排列如下。

someapp
 django
  apps
   subapp1
   subapp2
   subapp3
   __init__.py
 setup.py

python setup.py install之后,安装位置缺少上面显示的__init__.py,如果缺少该文件,当我尝试将它们添加到INSTALLED_APPS时,django找不到subapp1,subapp2,subapp3。

当我尝试添加someapp.django.apps.subapp1 django说

  

没有名为apps.subapp1的模块

当我在安装位置添加__init__.py in apps`文件夹时,错误就会消失。

运行setup.py后,所有其他文件夹都有__init__.pyapps除外。

我尝试更改apps目录名称,认为这可能是一个保留字,但它没有改变任何内容。我也尝试在__init__.py文件中添加一些内容,以为它可能不是空的但没有帮助。还尝试添加一个空的models.py文件,认为需要更多,但仍然没有骰子。

我的setup.py文件只是标准的样板文件。也许我需要添加一些东西。我尝试使用distutils而不是setuptools,但这并没有什么区别。

#setup.py

import os
from setuptools import setup

def read(fname):
    return open(os.path.join(os.path.dirname(__file__), fname)).read()


setup(
    name = "appname",
    version = "0.0.1",
    author = "blah inc",
    author_email = "blah@blah.com",
    description = ("some description"),
    license = "MPL",
    keywords = "some keywords",
    url = "http://someurl.org",
    packages=[     
        'someapp',
        'someapp.api',
        'someapp.django',
        'someapp.django.apps.subapp1',
        'someapp.django.apps.subapp2',
        'someapp.django.apps.subapp3',
        'someapp.eventsocket',
        'someapp.interface',
    ],
   etc.
   etc.
   .
   .
)

1 个答案:

答案 0 :(得分:5)

你错过了someapp.django.apps套餐;您必须在该列表中列出所有包。

您可以使用setuptools.find_packages()

来简化任务
setup(
    # ...
    packages=find_packages(),

    # ...
)