Python supports all types of execution; you can run Python code directly into a shell, or put your code into file and run later.
Sometimes to start a new Python project is very hard; Write a script? Write a module? Write a package?
The best choice is micropiecies pattern: write a script, so rewrite that in a module and so rewrite in a package.
This pattern permits you to don't re-inventing the wheel every day and you reuse the code in the future.
Python package has this structure:
pkg ├── __init__.py ├── module1.py └── subpkg ├── __init__.py ├── __main__.py └── module2.py
The folder pkg is a package, because contains __init__.py module. Also the folder subpkg is a package; is a subpackage of pkg.
module1.py and module2.py are a modules of their packages.
The __main__.py module permits the execution of package.
If you will become a Python developer, then you use other usually tools.
In order, you follow this steps every piece of code you write:
Every change in your code, may introduces possible bugs. To discard this, every time we need test own package in the correct environment.
To do this, some tools are needed over Python itself, like git, docker and make.
It is not enough to simply create a Python package and make it immediately available to everyone. You also have to think about how to document it, explain it briefly to other people, license it and explain how to integrate into the project.
This requires developing files like README, LICENSE, CODE_OF_CONDUCT and CONTRIBUTING.
Maybe adding a CHANGELOG to keep and have others keep track of the changes made to each version.
To realize all parts of a Python project, serves some hours or days.
But exists a tool for this purpose: psp.
After we follow the installation instructions:
[test@ubuntu ~] sudo apt install -y python3 python3-pip git curl [test@ubuntu ~] curl -L https://github.com/MatteoGuadrini/psp/releases/download/v0.1.0/psp.deb -o psp.deb [test@ubuntu ~] sudo dpkg -i psp.deb
run it:
[test@ubuntu ~] psp Welcome to PSP (Python Scaffolding Projects): 0.1.0 > Name of Python project: app > Do you want to create a virtual environment? Yes > Do you want to start git repository? Yes > Select git remote provider: Gitlab > Username of Gitlab: test_user > Do you want unit test files? Yes > Install dependencies: flask > Select documention generator: MKDocs > Do you want to configure tox? Yes > Select remote CI provider: CircleCI > Do you want create common files? Yes > Select license: Gnu Public License > Do you want to install dependencies to publish on pypi? Yes > Do you want to create a Dockerfile and Containerfile? Yes Python project `app` created at app
Now, check the Python project that has been created:
[test@ubuntu ~] ls -lah app total 88K drwxrwxr-x 9 test test 440 Dec 20 14:48 . drwxrwxrwt 29 root root 680 Dec 20 14:49 .. drwxrwxr-x 2 test test 60 Dec 20 14:47 .circleci drwxrwxr-x 7 test test 200 Dec 20 14:47 .git -rw-rw-r-- 1 test test 381 Dec 20 14:47 .gitignore drwxrwxr-x 4 test test 80 Dec 20 14:47 .gitlab -rw-rw-r-- 1 test test 127 Dec 20 14:48 CHANGES.md -rw-rw-r-- 1 test test 5.4K Dec 20 14:48 CODE_OF_CONDUCT.md -rw-rw-r-- 1 test test 1.1K Dec 20 14:48 CONTRIBUTING.md -rw-rw-r-- 1 test test 190 Dec 20 14:48 Containerfile -rw-rw-r-- 1 test test 190 Dec 20 14:48 Dockerfile -rw-rw-r-- 1 test test 35K Dec 20 14:48 LICENSE.md -rw-rw-r-- 1 test test 697 Dec 20 14:48 Makefile -rw-rw-r-- 1 test test 177 Dec 20 14:48 README.md drwxrwxr-x 2 test test 60 Dec 20 14:47 docs -rw-rw-r-- 1 test test 19 Dec 20 14:47 mkdocs.yml -rw-rw-r-- 1 test test 819 Dec 20 14:48 pyproject.toml -rw-rw-r-- 1 test test 66 Dec 20 14:47 requirements.txt drwxrwxr-x 2 test test 80 Dec 20 14:47 tests -rw-rw-r-- 1 test test 213 Dec 20 14:47 tox.ini drwxrwxr-x 2 test test 80 Dec 20 14:46 app drwxrwxr-x 5 test test 140 Dec 20 14:46 venv
Start develop the package that psp command has created for our project.
[test@ubuntu ~] cd app/ && ls -lh app/ total 8.0K -rw-rw-r-- 1 test test 162 Dec 20 14:46 __init__.py -rw-rw-r-- 1 test test 204 Dec 20 14:46 __main__.py [test@ubuntu ~] vim app/core.py
from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "<p>Wow, this is my app!</p>"
Now, import our hello_world function into __main__.py file:
pkg ├── __init__.py ├── module1.py └── subpkg ├── __init__.py ├── __main__.py └── module2.py
[test@ubuntu ~] sudo apt install -y python3 python3-pip git curl [test@ubuntu ~] curl -L https://github.com/MatteoGuadrini/psp/releases/download/v0.1.0/psp.deb -o psp.deb [test@ubuntu ~] sudo dpkg -i psp.deb
You have write a simple, but organized and powerful package that is ready to production and distribution.
Test our package.
[test@ubuntu ~] psp Welcome to PSP (Python Scaffolding Projects): 0.1.0 > Name of Python project: app > Do you want to create a virtual environment? Yes > Do you want to start git repository? Yes > Select git remote provider: Gitlab > Username of Gitlab: test_user > Do you want unit test files? Yes > Install dependencies: flask > Select documention generator: MKDocs > Do you want to configure tox? Yes > Select remote CI provider: CircleCI > Do you want create common files? Yes > Select license: Gnu Public License > Do you want to install dependencies to publish on pypi? Yes > Do you want to create a Dockerfile and Containerfile? Yes Python project `app` created at app
And result is:
Now tests also the Python code on the package, throught tests folder:
[test@ubuntu ~] ls -lah app total 88K drwxrwxr-x 9 test test 440 Dec 20 14:48 . drwxrwxrwt 29 root root 680 Dec 20 14:49 .. drwxrwxr-x 2 test test 60 Dec 20 14:47 .circleci drwxrwxr-x 7 test test 200 Dec 20 14:47 .git -rw-rw-r-- 1 test test 381 Dec 20 14:47 .gitignore drwxrwxr-x 4 test test 80 Dec 20 14:47 .gitlab -rw-rw-r-- 1 test test 127 Dec 20 14:48 CHANGES.md -rw-rw-r-- 1 test test 5.4K Dec 20 14:48 CODE_OF_CONDUCT.md -rw-rw-r-- 1 test test 1.1K Dec 20 14:48 CONTRIBUTING.md -rw-rw-r-- 1 test test 190 Dec 20 14:48 Containerfile -rw-rw-r-- 1 test test 190 Dec 20 14:48 Dockerfile -rw-rw-r-- 1 test test 35K Dec 20 14:48 LICENSE.md -rw-rw-r-- 1 test test 697 Dec 20 14:48 Makefile -rw-rw-r-- 1 test test 177 Dec 20 14:48 README.md drwxrwxr-x 2 test test 60 Dec 20 14:47 docs -rw-rw-r-- 1 test test 19 Dec 20 14:47 mkdocs.yml -rw-rw-r-- 1 test test 819 Dec 20 14:48 pyproject.toml -rw-rw-r-- 1 test test 66 Dec 20 14:47 requirements.txt drwxrwxr-x 2 test test 80 Dec 20 14:47 tests -rw-rw-r-- 1 test test 213 Dec 20 14:47 tox.ini drwxrwxr-x 2 test test 80 Dec 20 14:46 app drwxrwxr-x 5 test test 140 Dec 20 14:46 venv
Now you can save the development of your web app.
[test@ubuntu ~] cd app/ && ls -lh app/ total 8.0K -rw-rw-r-- 1 test test 162 Dec 20 14:46 __init__.py -rw-rw-r-- 1 test test 204 Dec 20 14:46 __main__.py [test@ubuntu ~] vim app/core.py
Simulate with docker your production environment:
from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "<p>Wow, this is my app!</p>"
And the result is the same:
Now, after the next development, you can use the pipeline with Makefile:
[test@ubuntu app] vim app/__main__.py
Now, if you want, you are ready to publish youp Python package on PyPi:
#! /usr/bin/env python3 # -*- encoding: utf-8 -*- # vim: se ts=4 et syn=python: # Generated by psp (https://github.com/MatteoGuadrini/psp) from .__init__ import __version__ print(f'app {__version__}') from .core import app app.run(debug=True)
In less than five minutes, you have created a Python project where the development of the package itself is the only thing you have to worry about.
Tools used on this article:
psp: repository -- docs
git: repository -- docs
docker: repository -- docs
make: repository -- docs
python: repository -- docs
The above is the detailed content of How to create own Python project in inutes. For more information, please follow other related articles on the PHP Chinese website!