Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: using downloaded modules

Tags:

python

I am new to Python and mostly used my own code. But so now I downloaded a package that I need for some problem I have.

Example structure:

root\
    externals\
        __init__.py
        cowfactory\
            __init__.py
            cow.py
            milk.py

    kittens.py

Now the cowfactory's __init__.py does from cowfactory import cow. This gives an import error.

I could fix it and change the import statement to from externals.cowfactory import cow but something tells me that there is an easier way since it's not very practical.

An other fix could be to put the cowfactory package in the root of my project but that's not very tidy either.

I think I have to do something with the __init__.py file in the externals directory but I am not sure what.

like image 694
Pickels Avatar asked Sep 04 '10 07:09

Pickels


1 Answers

Inside the cowfactory package, relative imports should be used such as from . import cow. The __init__.py file in externals is not necessary. Assuming that your project lies in root\ and cowfactory is the external package you downloaded, you can do it in two different ways:

  1. Install the external module

    External Python packages usually come with a file "setup.py" that allows you to install it. On Windows, it would be the command "setup.py bdist_wininst" and you get a EXE installer in the "dist" directory (if it builds correctly). Use that installer and the package will be installed in the Python installation directory. Afterwards, you can simply do an import cowfactory just like you would do import os.

    If you have pip or easy_install installed: Many external packages can be installed with them (pip even allows easy uninstallation).

  2. Use PYTHONPATH for development

    If you want to keep all dependencies together in your project directory, then keep all external packages in the externals\ folder and add the folder to the PYTHONPATH. If you're using the command line, you can create a batch file containing something like

    set PYTHONPATH=%PYTHONPATH%:externals
    yourprogram.py
    

    I'm actually doing something similar, but using PyDev+Eclipse. There, you can change the "Run configurations" to include the environment variable PYTHONPATH with the value "externals". After the environment variable is set, you can simply import cowfactory in your own modules. Note how that is better than from external import cowfactory because in the latter case, it wouldn't work anymore once you install your project (or you'd have to install all external dependencies as a package called "external" which is a bad idea).

Same solutions of course apply to Linux, as well, but with different commands.

like image 145
AndiDog Avatar answered Sep 24 '22 08:09

AndiDog