Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Kevin Conway Newsgroups: comp.lang.python Subject: Re: Python's import situation has driven me to the brink of imsanity Date: Sun, 07 Feb 2016 06:34:45 +0000 Lines: 62 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Trace: news.uni-berlin.de 6MDc7UOqDOeJJXzsIzBCZQTuyL9mYjlogwAIashuycpQ== Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.000 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'received:209.85.223': 0.03; 'modify': 0.04; 'subject:Python': 0.05; 'repository': 0.05; 'executable': 0.07; 'setup.py': 0.07; 'cc:addr:python-list': 0.09; 'imports': 0.09; 'python': 0.10; 'argument': 0.15; 'importing': 0.15; '2016': 0.16; 'executable,': 0.16; 'macro': 0.16; 'mistake.': 0.16; 'received:io': 0.16; 'received:psf.io': 0.16; 'setuptools': 0.16; 'structure.': 0.16; 'subject:import': 0.16; 'sys.path': 0.16; 'url:setuptools': 0.16; 'usable)': 0.16; 'wrote:': 0.16; 'first.': 0.18; '>': 0.18; 'email addr:gmail.com>': 0.18; '(not': 0.20; 'cc:2**0': 0.20; 'cc:addr:python.org': 0.20; "aren't": 0.22; 'file.': 0.22; 'code.': 0.23; 'feb': 0.23; 'sat,': 0.23; 'second': 0.24; 'import': 0.24; 'header:In-Reply-To:1': 0.24; 'script': 0.25; 'install': 0.25; 'developers': 0.26; 'command': 0.26; 'installed': 0.26; 'chris': 0.26; 'points': 0.27; 'packaging': 0.27; 'least': 0.27; 'question': 0.27; 'message-id:@mail.gmail.com': 0.27; '[2]': 0.27; 'package.': 0.27; 'tend': 0.27; 'correct': 0.28; 'function': 0.28; "skip:' 10": 0.28; 'actual': 0.28; 'expose': 0.29; 'project?': 0.29; 'usable': 0.29; 'code:': 0.29; 'allows': 0.30; 'url:mailman': 0.30; 'creating': 0.30; 'code': 0.30; 'certainly': 0.30; "i'd": 0.31; 'rules': 0.31; 'entry': 0.31; 'everyone': 0.31; '[1]': 0.32; 'statement': 0.32; 'problem': 0.33; 'url:python': 0.33; 'rule': 0.33; 'though.': 0.33; 'url:listinfo': 0.34; 'running': 0.34; 'advice': 0.35; 'received:google.com': 0.35; 'question,': 0.35; 'something': 0.35; 'asking': 0.35; 'but': 0.36; 'should': 0.36; 'project': 0.36; 'there': 0.36; 'url:org': 0.36; 'received:209.85': 0.36; 'form,': 0.36; 'pm,': 0.36; 'subject:: ': 0.37; 'two': 0.37; 'say': 0.37; 'received:209': 0.38; 'stuff': 0.38; 'anything': 0.38; 'files': 0.38; 'url:en': 0.39; 'subject:the': 0.39; 'url:mail': 0.40; 'called': 0.40; 'easy': 0.60; 'your': 0.60; 'reach': 0.61; 'more': 0.63; 'more.': 0.63; 'hear': 0.64; 'within': 0.64; 'it!': 0.64; 'talking': 0.67; 'chrisa': 0.84; 'url:readthedocs': 0.84; '1:47': 0.91; 'url:latest': 0.91; 'luck': 0.95 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-type; bh=/2dM84mtORGg7/MsNpYIERTDwES5zK+AzrrbtQuSNQU=; b=hbnPuV6zFh8J/DPJrlyhX8woehPHE5vAqY5jhfwo6jy7E63YCoWJwzEa3lT7AhQH3o o1fh7ft6bvRXdTUrh03CfMsTZYCEfGpuR9ZrlJ1kTnl6IuUrIqtIjM6yEHIDyIG4DKkC 5U2zRVUKG3g4feer4vAooXP/e5btXhYp9GnJbarEpEmeLF29WtQp27opoCdUTYsc0CMv k0KJMeSkFrY9vgbYV/2+yPCST7sNt08C5TjfjagWui4rLFKajAOti32/RK62zpscG0xv TrfGZ9RtdbOzGY9V8ekaSwe6PJ5QligLIt0PJbzMlZC8MD5XLDM3f3HeWtZd+fCvG9fE hOlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-type; bh=/2dM84mtORGg7/MsNpYIERTDwES5zK+AzrrbtQuSNQU=; b=dHeds8whUm292pYjvbn4QRZsnE5cxAq6wvXjYz2yw0DUPt2br1PI3ty2CHlVQIUyj6 WRotSmNQk9SWj7kvLT/GSlT0rZDoauuIJ4X+EhqgQT55P6vy9HPrOwHTRKSi9qu1k7Aj 0H1BCfxQggoJZH6ej02u6WW8IpdiUUHVh+1CZNh9J5N6JBfIuTCEAhJEfsYSfkhcsxgM Dc1kxSWCT+gieC5dVOAkSDuIEjL/SpqRq85vkgAMu7r4jKtKtjgX2h/o6leDynvgBIsC ZMeg92Qi/d+Dcyx76bTCMuxLWIOjBl5huNdGRSeIbWv1WMvFCqI8tQgzCACln3AE9Wa+ uQlA== X-Gm-Message-State: AG10YOTz0ohAHHYICQbMCNXxKYEN+5fw7mLt5mLDekdVNrWB+sWLfwoS2Ti2sAibg66dvKpeZuxdnicm134pLg== X-Received: by 10.107.35.65 with SMTP id j62mr22157856ioj.30.1454826895150; Sat, 06 Feb 2016 22:34:55 -0800 (PST) In-Reply-To: X-Content-Filtered-By: Mailman/MimeDel 2.1.21rc2 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.21rc2 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Xref: csiph.com comp.lang.python:102610 > My question is: is this crazy? Please tell me there's a better way and I just wasted my time creating this package. There is a better way and you have wasted your time creating this package. I hear your problem statement as asking two questions. The first is: What is the right way to include executable content in my Python project? The second is: How do I expose executable content from a Python project? As to the first question, from your project README: > Say you have a python project (not a package), with the following structure: All Python code that you want to install and make available in any form, import or executable, _must_ be contained within a Python package. Organizing Python code in any way other than Python packages will result in the challenges you have described. The correct way to include executable content is to place the Python code within the package structure. It should not be put in other directories within the repository root. As to the second question, once all Python code is contained within a package that can be installed you can use setuptools entry points to expose the executable code. The setup() function from setuptools that is used to create setup.py files has an argument called 'entry_points' that allows you to expose executable content over the command line. See [1] and [2] for more details. Feel free to reach out to me off-list if you have a specific project you need advice on. The rules for organizing and packaging Python code aren't complex but they tend to cause new Python developers to stumble at first. A general rule I give everyone when talking about packaging or importing code: If you have to modify sys.path to makes something work then you have most certainly made a mistake. [1] https://pythonhosted.org/setuptools/setuptools.html#automatic-script-creation [2] http://python-packaging.readthedocs.org/en/latest/command-line-scripts.html#the-console-scripts-entry-point On Sat, Feb 6, 2016 at 8:54 PM Chris Angelico wrote: > On Sun, Feb 7, 2016 at 1:47 PM, wrote: > > Imsanity allows you to make imports usable (not ideal, but at least > usable) for python projects without having to manage PYTHONPATHs or do > whacky stuff like running files with python -m or put even whackier > boilerplate at the top of every file. And all it requires is 'import > imsanity' at the top of every file. You can put it in a macro or even just > type it because it's short and easy to remember. > > > > My question is: is this crazy? Please tell me there's a better way and I > just wasted my time creating this package. There's nothing I'd like to hear > more. > > Well, anything that makes you type "import imsanity" at the top of > every script MUST be crazy. :) I don't know about the actual > content/purpose though. Good luck with it! > > ChrisA > -- > https://mail.python.org/mailman/listinfo/python-list >