Python offers Modules & Packages(directory of modules) for using third-party codes in our program without having to reinvent the wheel. However, when i started with python -I had a hard time figuring out how to import third-party modules & packages into my program.
Here’s a gist of what I finally learnt:
Know the Python Path
Knowing about the PYTHONPATH is key to installing and importing third-party packages. When an import command is passed, python looks for the module/package in a list of places. The default path(s) where python would search for modules can be found out by:
import sys print sys.path
For my computer it gives me the the following paths:
[”, ‘C:\\Python27\\Lib\\idlelib’, ‘C:\\Windows\\system32\\python27.zip’, ‘C:\\Python27\\DLLs’, ‘C:\\Python27\\lib’, ‘C:\\Python27\\lib\\plat-win’, ‘C:\\Python27\\lib\\lib-tk’, ‘C:\\Python27’, ‘C:\\Python27\\lib\\site-packages’]
Starters would do good to install or add modules in one of these paths. If you get this wrong, you will get an error like: ImportError: No module named “foo” . By convention, all third-party packages go into Pythonfolder/Lib/site-packages.
Importing Module or Importing packages ?
When you add a third-party module to your python library, remember that simply dumping a folder with bunch of .py files will not make it a package. When you use the import command, python does not look inside folders, even if the folders are located in the PYTHONPATH. However, if a folder in the PythonPath has a file called __init__.py, Python jumps inside it and treats the complete folder as a package.
Changing the Pythonpath
If you want to add packages in any other directory (other than the python paths listed above) – you will have to first export the python path in your code with:
PYTHONPATH=$PYTHONPATH:C/Your new path/yournewmodulefolder
Virtual Environment Builder
Suppose you build several applications in your Python environment where one of your application requires version 1 of PackageX, while another application of yours requires version 2 of PackageX.
If you try placing both these version in the same folder (say site-package), you are in for some trouble. To avoid any such interference, you can have separate Virtual environment for each of your applications using Virtual Python Environment builder.