开发者

Python: using downloaded modules

开发者 https://www.devze.com 2023-01-15 07:18 出处:网络
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.

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 im开发者_如何学JAVAport 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.


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.


generally, you would use easy_install our pip to install it for you in the appropriate directory. There is a site-packages directory on windows where you can put the package if you can't use easy_install for some reason. On ubuntu, it's /usr/lib/pythonX.Y/dist-packages. Google for your particular system. Or you can put it anywhere on your PYTHONPATH environment variable.

As a general rule, it's good to not put third party libs in your programs directory structure (although there are differing opinions on this vis a vis source control). This keeps your directory structure as minimalist as possible.


The easiest way is to use the enviroment variable $PYTHONPATH. You set it before running your scripts as follows:

export $PYTHONPATH=$PYTHONPATH:/root/externals/

You can add as many folders as you want (provided their separate by :) and python will look in all those folders when importing.

0

精彩评论

暂无评论...
验证码 换一张
取 消