python中init和setup有什么区别_python – 为什么setup.py在安装期间运行模块__init__.py?...

我正在使用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

version=__import__('lock').__version__,

File "/01_Development/django-simple-lock/lock/__init__.py", line 8, in

raise ImproperlyConfigured('Please add the PACKAGE_SPECIFIC_SETTING setting to your settings.py')

解决方法:

你的setup.py是可执行的python.它作为python脚本运行,以发现您的包分发配置.

您的setup.py运行此代码:

version=__import__('lock').__version__,

这会导入您的锁包,因此会加载该包中的__init__.py文件.删除该呼叫,您的设置将成功.将版本存储在其他地方.

请注意,引用甚至会明确告诉您:

File "setup.py", line 9, in

version=__import__('lock').__version__,

标签:python,setup-py

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值