On Wed, Sep 22, 2010 at 12:43:32PM -0500, Stephen Burke wrote: > I am packaging up a python app to upload it to my PPA eventually. > Before this everything I have written is in one directory so all my > imports were simple. Now that I am breaking up the app and the top > level script is in a "bin" directory and the helper scripts are in a > "helpers" directory on the same level. How should my imports be with > this directory structure. Would I modify the PYTHONPATH to add any > directories I need or is there a better way to do this? I have read > python docs about imports but I'm wondering if there are any more > guidelines in terms of imports for python apps that are packaged for > Ubuntu. >
If I understood the question correctly.. I don't think this problem is Ubuntu-specific at all. It's more about Python's import mechanisms and distutils, but let me tell how I would do in your situation. I assume you are using Python version 2.6. It's a quite good practice to place all your modules inside a package module. Let's assume that your project is called myproject. Then I would call the project directory myproject. I would also create a top-level package called myproject (but the directory name here is lib). It's a directory with __init__.py file in it. Directory structure of the project would be something like this: myproject/setup.py myproject/src/bin/script myproject/src/lib/__init__.py myproject/src/lib/helper.py And setup() in setup.py would resemble the one below: distutils.core.setup( . . . package_dir={'myproject': 'src/lib'}, packages=['myproject'], scripts=['src/bin/script'], . . ) So the scripts reside in bin-directory and lib-directory would represent your top-level package, myproject. python setup.py install will install files by default under /usr/local prefix: /usr/local/bin/script /usr/local/lib/python2.6/dist-packages/myproject /usr/local/lib/python2.6/dist-packages/myproject/__init__.py /usr/local/lib/python2.6/dist-packages/myproject/helper.py /usr/local/bin is by default in PATH and /usr/local/lib/python2.6./dist-packages in Python's search path. Once installed, helper.py can be imported with: import myproject.helper There should be no need to play with PYTHONPATH or sys.path.append() whatsoever. The package structure works as a namespace. It gives a logical structure for your project and reduces the risk of mixing identically named modules. For further information, please refer to: http://docs.python.org/distutils/ When you are building a deb-package for your project, see https://wiki.ubuntu.com/PackagingGuide/Complete#Packaging%20Python%20modules%20with%20CDBS I hope this helped. Perhaps more experienced ones can correct my mistakes and give alternative solutions. -- Tuomas
signature.asc
Description: Digital signature
-- Ubuntu-devel-discuss mailing list Ubuntu-devel-discuss@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel-discuss