Path: csiph.com!usenet.pasdenom.info!aioe.org!news.stack.nl!newsfeed.xs4all.nl!newsfeed1.news.xs4all.nl!xs4all!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.014 X-Spam-Evidence: '*H*': 0.97; '*S*': 0.00; 'level,': 0.07; 'suppose': 0.07; 'function,': 0.09; 'mess': 0.09; 'wrote': 0.14; 'function?': 0.16; 'imports': 0.16; 'modules.': 0.16; 'reusable': 0.16; 'subject:caught': 0.16; 'subject:import': 0.16; 'wrote:': 0.18; 'code.': 0.18; 'module': 0.19; 'basically': 0.19; 'finished': 0.19; '>>>': 0.22; 'import': 0.22; 'putting': 0.22; 'module,': 0.24; 'mon,': 0.24; 'gets': 0.27; 'header:In-Reply-To:1': 0.27; 'function': 0.29; 'message-id:@mail.gmail.com': 0.30; 'code': 0.31; 'another': 0.32; 'subject:the': 0.34; 'could': 0.34; 'problem': 0.35; 'but': 0.35; 'received:google.com': 0.35; 'responsible': 0.36; 'level': 0.37; 'depends': 0.38; 'nov': 0.38; 'needed': 0.38; 'to:addr:python-list': 0.38; 'pm,': 0.38; 'though,': 0.39; 'to:addr:python.org': 0.39; 'called': 0.40; 'dave': 0.60; 'ian': 0.60; 'first': 0.61; 'such': 0.63; '(that': 0.65; 'ending': 0.78; 'angel': 0.91; 'exposing': 0.91 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; bh=ldCH0km9bgzZtMZiXN6XSX2fT7XmthDS1hpIHieiv9A=; b=ww8vf29gBb2uRRNiHd/ZJ8QIprOfIqn8sr8/zl9nLuwVul8kuVAYrjV5Ky73EoA0Lr 3ndUBjNb8LZW18emK/r9cwUmIKFmuUEQfk4hZoukNi+muzmQ9us2w9qVbQH/AT8M6UQ7 QLDVnxj+lJpG0uBdY7L/PK9n5FCMqQMjnuIv+o0h0w8sKPTl2aQzY4ocW3UAdfV3CD0D i8AhLBspW+GKU4ZsDwyvdTdXH+Sgx566j47dlRPeW0OQRrzKLB+wcDoo3mhW9Qw64/mi ZVIsCTugqcv713f8KcSIzyw+S0IkNPFXQPHqymf7xlFcXS1vqF009kETww3iw3BclRJI B+PQ== X-Received: by 10.70.38.69 with SMTP id e5mr3345454pdk.6.1416324553755; Tue, 18 Nov 2014 07:29:13 -0800 (PST) MIME-Version: 1.0 In-Reply-To: References: From: Ian Kelly Date: Tue, 18 Nov 2014 08:28:32 -0700 Subject: Re: caught in the import web again To: Python Content-Type: text/plain; charset=UTF-8 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 28 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1416324563 news.xs4all.nl 2944 [2001:888:2000:d::a6]:48916 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:81006 On Mon, Nov 17, 2014 at 6:20 PM, Dave Angel wrote: > Ian Kelly Wrote in message: >> On Mon, Nov 17, 2014 at 3:17 PM, Dave Angel wrote: > >>> In a module that might get tangled in a cycle, avoid global code >>> that depends on other modules. Instead of putting such >>> initialization at top level, put inside a function that gets >>> called after all suspect imports are completed. (That function >>> has global keywords ). >> >> If the problem is that one of those modules would import the current >> module, then "after all suspect imports are completed" basically means >> after the current module has finished importing. So what would be >> responsible for calling such a function? >> > > If one builds a set of modules that cannot avoid recursive > imports, then one can ask the code that imports it to make a call > after importing. Or all that is needed to avoid exposing the mess > is that the top level not be part of the loops. This would make the module less reusable though, since the first other module to import it in one program might still be used in another program but not be the first other module to import it. Or I suppose for simplicity it could be required that all importers call the initialization function, and have the function return immediately if it's been called previously. However, I don't think there's any way to do this without ending up with smelly code.