A platform independent way to set your Python Path for your Python applications
In a software development house where desktop computers run Microsoft Windows while servers run Linux, software developers will have to ensure that the Python code that they wrote on their Windows machine can run on the deployment servers which are running Linux.
One unavoidable task for Python application developers is the importing of functionalities that are contained in other Python scripts. In order for the Python interpreter to find the Python scripts that are referenced by Python import statements, the Python Path will need to contain the URLs of the directories that contain the Python scripts to be imported.
This post documents how I set my Python Path for my Python applications in a platform independent way.
The platform dependent way to set your Python Path
One platform dependent way that you may configure your Python Path is by setting the PYTHONPATH
environment variable through a script file targeted at the native command-line interpreter that is provided by the Operating System where your Python application will run on.
To run your Python application on Windows, you may create a batch file, run.bat
with the following contents:
set PYTHONPATH=%PYTHONPATH%;C:\your_python_lib python app.py
And to run your Python application on Linux, you may create a shell script, run.sh
with the following contents:
export PYTHONPATH=$PYTHONPATH:/your_python_lib python app.py
This approach of configuring Python Path for your Python applications will result in duplicated effort whenever you import new library scripts that are located in new directories.
The platform independent way to set your Python Path
Setting your Python Path in a platform independent way will avoid duplicated effort whenever you need to import new library scripts that are located in new directories. I typically follow the following guidelines to set my Python Path in a platform independent way:
- Place the library scripts in a directory that is near to the starter script.
- Set Python Path inside the starter script.
Placing the library scripts in a directory that is near to the starter script
I tend to follow the following directory structure whenever I need to create new Python applications:
. |--app.py |--import |--techcoil |--__init__.py |--controller |--__init__.py |--users.py !--products.py |--storage |--__init__.py |--mongo.py |--file.py |--service |--__init__.py |--users.py |--products.py
In the above directory structure, I designate app.py
as the starter script. I then designate a directory , which I named as import
, in the same directory as app.py
. I will place the module packages that my Python application need to import inside the import
directory.
Setting Python Path inside the starter script
To set the Python Path inside the starter script, I will include the following Python codes at the top:
import os import sys root_directory = os.path.dirname(os.path.realpath(__file__)) sys.path.append(os.path.join(root_directory, 'import')) ### Application specific logic ###
In the above codes, I first import the os
and sys
in-built Python modules. I then proceed to get the directory path where the executing script resides in (in this case, app.py
) and set the value to the root_directory
variable.
I then construct the url to the import
directory and append it to the sys.path
variable. This will make the modules inside the import
directory visible to the Python interpreter.