How to import your package/modules from a script in bin folder in python

Viewed 10184

When organising python project, this structure seems to be a standard way of doing it:

myproject\
    bin\
        myscript
    mypackage\
        __init__.py
        core.py
    tests\
        __init__.py
        mypackage_tests.py
setup.py

My question is, how do I import my core.py so I can use it in myscript?

both __init__.py files are empty.

Content of myscript:

#!/usr/bin/env python
from mypackage import core
if __name__ == '__main__':
    core.main()

Content of core.py

def main():
    print 'hello'

When I run myscript from inside myproject directory, I get the following error:

Traceback (most recent call last):
  File "bin/myscript", line 2, in <module>
    from mypackage import core
ImportError: No module named mypackage

What am I missing?

4 Answers

I usually add my bin path into $PYTHONPATH, that will enable python to look for asked module in bin directory too.

export PYTHONPATH=/home/username/bin:$PYTHONPATH
$ python
import module_from_bin

I solved the issue following setuptools specifications.

In setup.py you can specify the modules as an argument for the function setup():

packages = find_packages() 

This finds all modules.

p.s. you have to import this function: from setuptools import setup, find_packages

Related