disutils, project structure & developing - n00b question

Discussion in 'Python' started by Wells, Oct 29, 2009.

  1. Wells

    Wells Guest

    So I have my project partitioned like so:

    ../setup.py
    ../pymlb/
    ../pymlb/fetcher.py
    ../demos
    ../demos/demo.py

    In demo.py I have:

    from pymlb import fetcher

    However, it fails b/c pymlb is up a folder. It's also NOT installed as
    a module in my module directory because it's a development effort and
    I don't want to run setup.py to install them. See what I mean?

    What's the work around here?
    Wells, Oct 29, 2009
    #1
    1. Advertising

  2. Wells

    Simon Forman Guest

    On Thu, Oct 29, 2009 at 2:42 PM, Wells <> wrote:
    > So I have my project partitioned like so:
    >
    > ./setup.py
    > ./pymlb/
    > ./pymlb/fetcher.py
    > ./demos
    > ./demos/demo.py
    >
    > In demo.py I have:
    >
    > from pymlb import fetcher
    >
    > However, it fails b/c pymlb is up a folder. It's also NOT installed as
    > a module in my module directory because it's a development effort and
    > I don't want to run setup.py to install them. See what I mean?
    >
    > What's the work around here?



    In order for "from pymlb import fetcher" no work you must make the
    './pymlb' directory into a "package" by adding a file called
    __init__.py (it can be empty.)

    Then make sure the "top" directory (i.e. '.' in your example) is in
    the python PATH. There are a couple of ways to do that:

    1.) Hack it in demo.py before importing fetcher
    (i.e. "import sys; sys.path.append(<string absolute path of '.'>)")

    2.) Use the PYTHONPATH environment variable.

    3.) Use a .pth file (See http://docs.python.org/library/site.html)
    You'll have to figure out what directory to put it in (on my system
    '/usr/lib/python2.5/site-packages' works) Note, although it's not
    mentioned in the site module docs you can include an absolute path and
    it will be added to sys.path.

    There is additional good information about .pth files on Bob
    Ippolito's blog:
    http://bob.pythonmac.org/archives/2005/02/06/using-pth-files-for-python-development/
    Be sure to read the comments too.

    4.) Probably some other method(s) that someone else will tell you... ;]

    HTH,
    ~Simon
    Simon Forman, Oct 29, 2009
    #2
    1. Advertising

  3. Wells

    Simon Forman Guest

    On Thu, Oct 29, 2009 at 3:45 PM, Simon Forman <> wrote:
    > In order for "from pymlb import fetcher" no work you must make the


    s/no/to/

    D'oh!
    Simon Forman, Oct 29, 2009
    #3
  4. Wells

    Lie Ryan Guest

    Simon Forman wrote:

    > In order for "from pymlb import fetcher" no work you must make the
    > './pymlb' directory into a "package" by adding a file called
    > __init__.py (it can be empty.)
    >
    > Then make sure the "top" directory (i.e. '.' in your example) is in
    > the python PATH. There are a couple of ways to do that:
    >
    > 1.) Hack it in demo.py before importing fetcher
    > (i.e. "import sys; sys.path.append(<string absolute path of '.'>)")
    >
    > 2.) Use the PYTHONPATH environment variable.
    >
    > 3.) Use a .pth file (See http://docs.python.org/library/site.html)
    > You'll have to figure out what directory to put it in (on my system
    > '/usr/lib/python2.5/site-packages' works) Note, although it's not
    > mentioned in the site module docs you can include an absolute path and
    > it will be added to sys.path.
    >
    > There is additional good information about .pth files on Bob
    > Ippolito's blog:
    > http://bob.pythonmac.org/archives/2005/02/06/using-pth-files-for-python-development/
    > Be sure to read the comments too.
    >
    > 4.) Probably some other method(s) that someone else will tell you... ;]


    4.) By importing the module from a main.py script in the main directory,
    and making every imported folder a package (by putting __init__.py
    file). This is the simplest method I found, but has the drawback that
    you can't use a subpackage for execution (only for imports).

    i.e.

    $ ls
    ../__init__.py
    ../setup.py
    ../pymlb/
    ../pymln/__init__.py
    ../pymlb/fetcher.py
    ../demos
    ../demos/demo.py
    ../run_script.py
    $ cat run_script.py
    #!/usr/bin/env python
    from demos import demo
    $ cat demos/demo.py
    from pymlb import fetcher
    $ ./run_script.py
    ....

    or something like that...
    Lie Ryan, Oct 29, 2009
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Koncept
    Replies:
    3
    Views:
    1,951
    Nick Santos
    Dec 6, 2003
  2. newgenre
    Replies:
    2
    Views:
    930
    Matt Berther
    Apr 19, 2004
  3. Ambush

    n00b Question

    Ambush, Dec 19, 2004, in forum: ASP .Net
    Replies:
    1
    Views:
    366
    John Timney \(ASP.NET MVP\)
    Dec 19, 2004
  4. Steve
    Replies:
    0
    Views:
    279
    Steve
    Oct 28, 2004
  5. Abhi
    Replies:
    0
    Views:
    272
Loading...

Share This Page