【发布时间】:2012-09-12 07:34:33
【问题描述】:
我正在使用 setup.py 安装一个包:
python setup.py install
我正在安装的包中的__init__.py 包括一些包级别检查,其中一项检查settings.py 中的属性是否可用。由于它是一个可再发行包,settings.py 不会通过包传递,但用户必须注意在其项目范围的 settings.py 中正确设置设置。
from django.core.exceptions import ImproperlyConfigured
from django.conf import settings
#check if settings are properly set
if not hasattr(settings, 'PACKAGE_SPECIFIC_SETTING'):
raise ImproperlyConfigured('Please add the PACKAGE_SPECIFIC_SETTING setting to your settings.py')
现在我想知道为什么调用 setup.py install 会运行我的 __init__.py(并且崩溃是因为它没有找到任何设置,这并不奇怪。)
我原以为setup.py 只会复制我的包并且不运行任何代码。每当使用我的包的另一个应用程序将我的包导入到他的代码中时,该代码就应该运行。
编辑:根据要求包含 setup.py
#!/usr/bin/env python
# vim: ai ts=4 sts=4 et sw=4 coding=utf-8
from distutils.core import setup
setup(
name='django-simple-lock',
version=__import__('lock').__version__,
license = 'GNU Lesser General Public License (LGPL), Version 3',
requires = ['python (>= 2.5)', 'django (>= 1.3)'],
provides = ['lock'],
description='Simple locking implementation as a reusable'
'Django app.',
long_description=open('README.rst').read(),
url='http://github.com/mr-stateradio/django-simple-lock',
packages=['lock', 'lock.tests'],
classifiers = [
'Development Status :: 4 - Beta',
'Environment :: Web Environment',
'Framework :: Django',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)',
'Programming Language :: Python',
'Topic :: Database',
'Topic :: Software Development :: Libraries :: Python Modules',
],
)
编辑:包含回溯:
/Users/Me/.virtualenvs/django1_4/bin/python setup.py install
Traceback (most recent call last):
File "setup.py", line 9, in <module>
version=__import__('lock').__version__,
File "/01_Development/django-simple-lock/lock/__init__.py", line 8, in <module>
raise ImproperlyConfigured('Please add the PACKAGE_SPECIFIC_SETTING setting to your settings.py')
【问题讨论】:
-
当你导入你的包时,
__init__.py被调用,不管你是否真的“运行”了任何东西。那么你是在任何地方导入它吗? -
请包括回溯,以及您的
setup.py的详细信息。