Python is shipped with a lot of modules, we can say that there are python modules for almost everything you need. You need to work with robots, or some hardware in a spaceship, you will find a Python module for that. In this post, we will talk about Python modules and how to create, install, upgrade, reload and use them. The Python module allows you to organize your Python code and makes it easier to maintain later. Inside a module, you can define functions, classes, and variables. You can send your module to your friends and share it with others so they can use it.
Standard Library Modules
Python shipped with a large collection of modules. There are more than 200 modules for common programming tasks.
These modules called the standard library, you can find them in most installations on all platforms.
These modules can be used by importing them using the import statement as we’ve seen in the previous post Python programming basics.
How import statement works
Some newcomers might think that the import statement works like the include directive in C language or require in PHP, but that far from the truth because the other languages all it does is just grabbing the file content.
In Python, the situation is little different. There are three steps performed the first time a program imports a given file.
- Find the module’s file.
- Compile it to bytecode if needed.
- Build the objects from the bytecode.
You type the imported file without the extension and without its full directory path.
Then Python compiles it to bytecode. If the source file is modified, the bytecode file (.pyc file) regenerated automatically.
You deploy your Python programs as just bytecode files and avoid sending the source and Python will load the bytecode files.
The final step of the import operation is to execute the generated bytecode.
Python Search for a Module
As we said earlier, you just type the name of the module without extension or complete path and Python will take care of the rest.
So where Python does the search for the modules?
- The home directory of your program.
- PATH environment variable directories.
- Standard library directories.
- Any .pth files.
- The site-packages home of your third-party extensions.
The combination of these items becomes sys.path list.
Actually, sys.path is the path where Python searches for modules.
You can get your path like this:
import sys
print(sys.path)
You can add new custom paths to search for modules using sys.path.append or
sys.path.insert
When you type import mymodule, Python will load any of the followings:
- Source code file named mymodule.py.
- Bytecode file named mymodule.pyc.
- Optimized bytecode file named mymodule.pyo.
- A directory named mymodule, for package imports.
- Compiled extension module like mymodule.so on Linux, or mymodule.dll on Windows.
- Compiled module which is written in C.
- ZIP file which is automatically extracted.
- Jython files which are Python for Java.
- .NET component, written in the IronPython version of Python
If you have two different files like mymodule.py and mymodule.dll, Python will load the first file found in the search path during the left-to- right search of sys.path. But what if python found both files in the same directory?
Any one of them can be loaded first, so stay away from falling in this situation.
Creating a Python Module
To create a Python module, nothing special is required, just open your editor and type your code and save your file with .py extension.
All defined functions of the module become its attributes.
For example, if you define a function like the following inside your module:
def myfunc:
print("welcome")
You can call the function myfunc from that imported module inside your code.
Keep in mind that when creating a module, the module name becomes a variable (without the extension) inside your Python program, so you can’t name a module if.py. Always avoid Python reserved keywords.
Installing Python Modules from Source
The module includes a special file named setup.py that handles the details.
You can install Python modules from the source like this:
$ python setup.py install
This command will install the module within the site-packages folder which could be like this C:\Python27\lib\site-packages
Or like this
C:\Users\LikeGeeks\AppData\Local\Programs\Python\Python36-32\lib\site-packages
Install Python Modules Using pip
You can use pip utility to install modules and packages from the PyPI repository.
Most developers prefer installing modules using this method. The best thing about pip is that it handles dependency checking.
You can install Python modules using pip like this:
$ pip install numpy
Also, you can upgrade your installed modules using pip like this:
$ pip install --upgrade numpy
This command will update all the dependencies of the modules.
Importing Modules
After writing your awesome modules or installing them, now you need to reuse it anywhere in your code, or maybe send it to your friends so they can use it, or share it with others on the web. How to import modules in your code?
There are two ways to achieve that, the first way is to use import statement, and the second way is to use from statement. Both of them will find, compile and run.
The major difference is that import statement fetches the whole module, while from statement fetches the specified attributes from the modules.
import mymodule
from mymodule import myfunc
The import Statement
Because import statement loads all attributes from the module so if you want to use any attribute, you have to use the module name like this:
import mymodule
mymodule.myfunc()
The from Statement
As we said before, the from statement loads only the specified attributes.
Using the from statement makes it less typing because we don’t have to specify the whole module name when calling it.
from mymodule import myfunc
myfunc()
Actually, behind the scenes the from statement is an extension of the import statement, the entire file is also loaded, but you will be provided with all attributes directly from your code.
You can write the from statement like this:
from mymodule import *
The asterisk here means import everything at the top level from the module.
The Danger of Using from Statement
Some Python developers recommend using the import statement over using the from statement.
But is this true? Does the from statement not safe?
Well, if you use the from to import variables, it will overwrite any variable that has the same name if exist without notice.
This problem, of course, doesn’t happen with the import statement. Since you type the module name to get its attributes, so no collision happens.
You should take care when using the from statement. Consider the following situation
#module1
def myfunc:
print("Hello from module 1")
#module2
def myfunc:
print("Hello from module 2")
Now, let’s import the above modules and try to use them
#MyCode
from module1 import myfunc
from module2 import myfunc
myfunc()
The output here will be from module 2 since the function will be overwritten.
Actually, this is not a common thing to encounter, but anyway, there is a solution for that.
Using Aliases
To avoid the name collision happened in the above example, you can use aliases like this:
#MyCode
from module1 import myfunc as myfunc1
from module2 import myfunc as myfunc2
myfunc1()
myfunc2()
It’s like a renaming the imports. Sometimes developers use aliases to shorten the module names they are importing when the module name is bigger.
After using aliases, do you think that using the from statements is dangerous? For me, it’s not.
Import Module Scope
You know that we can’t access the module attributes unless we import it.
Consider the following situation
#module1
M = 10
def myfunc():
global M
M = 20
#module2
M = 50
import module1
module1.myfunc()
print(M,module1.M)
When you run module2, the module1.myfunc() changes the M variable in module1 not the M in module2.
The result will be 50 20.
That means the global scope for module1.myfunc is the file that enclosing it, not the file it runs from.
The import statements don’t promote the visibility of the attributes, and the imported file can’t see the attributes in the importing file.
Reloading Modules
If you try to re-import the module after importing it on the top of your code, Python will fetch the already loaded module again.
To reload a module, you can use the reload function that can achieve that.
Why do we need to reload the imported module?
The answer is so simple. This allows some parts of your program to be modified without restarting your program. You can imagine any situation that needs dynamic customization.
Python can only reload modules written in Python only. So compiled extensions (like the discussed previously) can’t be reloaded.
You MUST import the module first before you reload it. You can reload modules like this:
import module1
module1.myfunc()
from importlib import reload
reload(module1)
module1.myfunc()
You can change the code of module1 in your text editor and it will be reloaded.
Reloading modules is a very powerful feature in Python if it is used carefully.
I hope you find the post useful and interesting. Keep coming back.
Thank you.

In this post, we will convert an array to object using PHP hydrator pattern. This method is so simple, it’s about transferring data from one place to another. We will define a class that will take an array and an object as inputs and search for all set() methods in the object and fills it with values from the array. First, we will determine the object class using get_class() function then we will use get_class_methods() to get the class methods.

If you want to process large files using PHP, you may use some of the ordinary PHP functions like file_get_contents() or file() which has a limitation when working with very large files. These functions rely on the memory_limit setting in php.ini file, you may increase the value but these functions still are not suitable for very large files because these functions will put the entire file content into memory at one point. Any file that has a size larger than memory_limit setting will not be loaded into memory, so what if you have 20 GB file and you want to process it using PHP? Another limitation is the speed of producing output. Let’s assume that you will accumulate the output in an array then output it at once which gives a bad user experience. For this limitation, we can use the yield keyword to generate an immediate result.
If you want to use a package in Laravel, you simply add a single line in composer.json file and the job is done. This is because the package is available in packagist.org, what if the package that you want to use is a non-Composer Laravel package? Maybe available on a git repo or a private repo or so. In this post, we will see how to install and use non-Composer Laravel Package and custom libraries inside your Laravel projects.
Laravel framework has a powerful protection from CSRF, XSS, and SQL injection, but there is no built-in Laravel spam protection. If you need to protect your form from spam bots, you can use something like Akismet or reCaptcha which provide strong spam protection. OK, but your users maybe don’t like it because of the nag images that may appear from time to time or solving those puzzles to submit the form. For me, I find that the honeypot technique much better in many cases, where there is a hidden field in the form and when submitting that field, a validation rule will validate this field if it’s zero length or not and if the field value length is not zero, that means there is a bot trying to submit the form. Well, let’s get our hands dirty.
Before we talk about how to prevent SQL injection, we have to know the impact of SQL Injection attack which is one of the most dangerous attacks on the web. The attacker can steal your data or even worse, the whole web server can be stolen from one SQL injection vulnerability. I wrote this post to show you how to prevent SQL injection. If you need to know more about SQL injection itself and its types and all other stuff, you can do a simple search on google if you want. The solution is to clean the request parameters coming from the user. Keep in mind that the solution that I’ll share with you is not like the most solutions on the web that go to every SQL statement and clean the request variables one by one. My solution is preventing SQL injection without messing with your CMS files.