How to Build Your First Python Package
- Choose Your API. The first real step into turning your code into a package, is deciding how users should use it — and make it importable.
- Document. Documentation is like lining up in a queue — we wish everyone would simply do it, but we tend to cut ourselves some slack whenever we can.
- Rearrange for Packaging.
- Sign-Up to PyPI.
Choose Your API. The first real step into turning your code into a package,is deciding how users should use it — and make it importable.
How to tell Python that a particular directory is a package?
To tell Python that a particular directory is a package, we create a file named __init__.py inside it and then it is considered as a package and we may create other modules and sub-packages within it. This __init__.py file can be left blank or can be coded with the initialization code for the package.
What is the difference between a module and a package in Python?
A module usually corresponds to a single file: something.py A “package” is essentially a module, except it can have other modules (and indeed other packages) inside it. A package usually corresponds to a directory with a file in it called __init__.py and any number of python files or other package directories:
How do I create a Python package?
Make your own Python package
- setup.py file -contains package metadata.
- setup. cfg file -a configuration file format used for storing settings.
- a sub-folder with the same name as parent folder (in this case dist_alx), where the actual Python code of your package is stored.
How do I package a Python application?
How to Create Packages of Your Application’s New Versions
- Edit the setup.py file with a text editor (e.g. nano) and set the new version number: version=’0.1.1′
- Edit the CHANGES.txt to reflect the changes.
- Make the necessary adjustments to the LICENSE.txt and README.txt.
- Upload your code following the previous step.
How do you build a package?
How to Build a Package
- Create a pkginfo file, if not done already.
- Create a prototype file, if not done already.
- Make your current working directory the same directory that contains your package’s prototype file.
- Build the package.
- Verify the contents of the package.
How do I create a PIP package in Python?
- Setup Your Project. Create a package say, dokr_pkg.
- Compiling Your Package. Go into your package folder and execute this command: python setup.py bdist_wheel.
- Install on Your Local Machine. If you want to test your application on your local machine, you can install the.whl file using pip:
- Upload on pip.
What is a Python package vs module?
Differences Between Python Modules and Packages
A module is a file containing Python code. A package, however, is like a directory that holds sub-packages and modules. A package must hold the file __init__.py.
What does Setup py do?
setup.py is a python file, the presence of which is an indication that the module/package you are about to install has likely been packaged and distributed with Distutils, which is the standard for distributing Python Modules. This allows you to easily install Python packages.
How do you distribute apps in Python?
To distribute an application, you need more than just a library to pip-install from PyPI. You require a fool-proof way of installing it and its dependencies in all supported operating systems. These dependencies can include other non-Python packages as well as external resources like binaries or images.
How do I create a Python deployment package?
Creating Python Deployment Package for AWS Lambda Function
- AWS Lambda.
- Building Lambda functions with Python.
- Need for the deployment package.
- Step 1: Open Command Prompt and create one folder.
- Step 2: Get inside the folder you created.
- Step 3: Now Create one virtual environment using python’s virtualenv package.
How do you package and deploy Python code?
To deploy, you need to upload this artifact to your production machine. To install it, just run dpkg -i my-package. deb. Your virtualenv will be placed at /usr/share/python/ and any script files defined in your setup.py will be available in the accompanying bin directory.
How do I create a Python package in Pycharm?
Create Python Packages
- In the Project tool window, select the destination directory.
- From the context menu of the selection, choose New | Python Package, or press Alt+Insert to invoke the context menu:
- In the New Package dialog that opens, specify the package name.
What is package in Python with example?
A package is basically a directory with Python files and a file with the name __init__. py. This means that every directory inside of the Python path, which contains a file named __init__. py, will be treated as a package by Python. It’s possible to put several modules into a Package.
What are Python packages?
A python package is a collection of modules. Modules that are related to each other are mainly put in the same package. When a module from an external package is required in a program, that package can be imported and its modules can be put to use.
How do I create a pip file?
Generate your own pipfile. lock
- Put the requirements.txt file in your project directory.
- Run pipenv lock.
- Run pipenv install –ignore-pipfile – this will install all packages and their dependencies using the pipfile. lock and will ignore the pipfile.
How do I create a Python package in Visual Studio code?
Was this documentation helpful?
- Install Visual Studio Code and the Python Extension.
- Install a Python interpreter.
- Verify the Python installation.
- Start VS Code in a project (workspace) folder.
- Select a Python interpreter.
- Create a Python Hello World source code file.
- Run Hello World.
How do you make a pip?
How do you write a PIP performance improvement plan?
- Identify the performance/behavior that needs improving.
- Provide specific examples for reasoning.
- Outline expected standard.
- Identify training and support.
- Schedule check-ins and review points.
- Sign and acknowledge.
How to locally develop a Python package?
How do I make a Python package?
How to Create a Python Package
When you have a large number of Python classes (also known as ″modules″), you’ll want to organize them into packages to make them easier to find.When the number of modules (a module may be as simple as a file holding a collection of classes) in a project develops sufficiently, it is preferable to organize them into packages – that is, to group together modules/classes that are functionally related.This article will walk you through the process of creating a Python package.
Steps to Create a Python Package
Working with Python packages is a really straightforward process. All that is required of you is:
- Create a directory and label it with the name of your package
- It should have all of your classes in it.
- Create ainit.py file in the directory where you want to start the program.
That’s all there is to it!It is really simple to construct a Python package from scratch.Theinit.py file is required because it informs Python that this directory is a Python package directory rather than a regular directory (or folder – whatever you want to name it).Python will not recognize this directory unless this file is present.In any case, it is in this file that we will write the import statements that will allow us to import the classes from our newly created package.
Example On How to Create a Python Package
The Animals package will be created in this lesson, which will consist of two module files entitled Mammals and Birds, which will each include the Mammals and Birds classes, and a single class named Mammals.
Step 1: Create the Package Directory
As a result, we first establish a directory called Animals.
Step 2: Add Classes
Now we’ll develop the two classes that will make up our package. Initialize the Animals directory with the following code in a file titled Mammals.py: First, create a file named Mammals.py and place the following code within it:
|class Mammals: definit (self): ”’ Constructor for this class. ”’ Create some member animals self.members = def printMembers(self): print(‘Printing members of the Mammals class’) for member in self.members: print(‘\t%s ‘ % member)|
The code is quite straightforward to understand!Among the properties of the class is members, which has a list of various animals that we could be interested in.A method entitled printMembers is also included, which produces a list of all the animals that belong to this class!Keep in mind that when you build a Python package, all classes must be capable of being imported, and they will not be run on the command line.Following that, we’ll construct a new class called Birds.
- The following code should be placed in a file titled Birds.py, which should be located under the Animals directory :
|class Birds: definit (self): ”’ Constructor for this class. ”’ Create some member animals self.members = def printMembers(self): print(‘Printing members of the Birds class’) for member in self.members: print(‘\t%s ‘ % member)|
This code is quite similar to the code that we gave for the Mammals class earlier in this article.
Step 3: Add theinit.py File
We next create a file namedinit.py under the Animals directory and paste the following code into it:
|from Mammals import Mammalsfrom Birds import Birds|
That’s all there is to it! When it comes to creating a Python package, there is nothing more to it. For testing purposes, we construct a simple Python script named test.py in the same directory as the Animals directory. The following code should be placed in the test.py file:
|Import classes from your brand new packagefrom Animals import Mammalsfrom Animals import BirdsCreate an object of Mammals class & call a method of itmyMammal = Mammals()myMammal.printMembers()Create an object of Birds class & call a method of itmyBird = Birds()myBird.printMembers()|
Create and Access a Python Package
Packages are a method of organizing a large number of packages and modules, resulting in a well-organized structure of data sets, with directories and modules being easily accessible.In the same way as separate disks and folders in an operating system assist us in keeping data, packages assist us in storing additional sub-packages and modules, which may then be utilized by the user when necessary.The Process of Creating and Exploring Packages To inform Python that a specific directory is a package, we create a file namedinit.py inside it.Once this file is created, the directory is considered a package, and we may construct further modules and sub-packages within it.
Thisinit.py file can either be left blank or programmed with the initialization code for the package, depending on your preferences.In order to build a Python package, we must follow these three basic steps:
- First, we establish a directory and give it a package name that is linked to the operation of the directory
- second, we create a directory and give it a package name that is relevant to the operation of the directory.
- Then we add the classes and the necessary functions to it
- last, we run it.
- Finally, we create aninit.py file within the directory, which informs Python that the directory is a package.
Creating a Package as an Example Look at the following example to see how a package is built. Let’s construct a package titled Cars and include three modules in it, namely BMW, Audi, and Nissan, to demonstrate how this works.
- We must first establish a directory with the name Cars, and then we must develop modules within that directory. In order to accomplish this, we must first create a file with the name Bmw.py and then populate its content by pasting the following code into it. the class Bmw is defined by the following formula: self.models = def out We then create a new file with the name Audi.py and put the same type of code to it, but with different members. Models(self): print(‘These are the BMW models that are currently available’) for model in self.models: print(‘t percent s’percent model) self.models = def out
- class Audi: definit (self): self.models = def out
- Print(‘These are the possible models for Audi’) for model in self.models: print(‘t percent’percent model)Then we create another file with the name Nissan.py and add code to it that is identical to the previous one, but with a new set of variables. Self-Definition: self.models = def out for the Nissan class Last but not least, we write theinit.py file, which has the following code: Models(self): print(‘These are the Nissan models that are currently available’) for model in self.models: print(″t percent s’percent model)
- This file will be placed within the Cars directory and may be left blank, or we can include the initialization code in it. This code will be placed inside the Cars directory. originating from BMW import BMW from Audi is being imported. Audi is an import from Nissan. Nissan Let us now put the package that we prepared to use. This may be accomplished by creating a sample.py file in the same directory as the Cars package and include the following code in it: ″ from the importation of automobiles importation of BMW from Cars Automobile importer AudifromCars.com Nissan ModBMW = Bmw()ModBMW.outModels()ModAudi = Audi()ModAudi.outModels()ModNissan = Nissan()ModNissan.outModels()ModBMW = Bmw()ModBMW.outModels()ModBMW = Bmw()ModBMW.outModels()ModBMW = Bmw()ModBMW.outModels()ModBMW = Bmw()ModBMW.outModels()Mod () There are several methods of gaining access to the packages. Take a look at this example and see if you can figure out what packages are associated with it and how we can get to it.
- Packages that include imports Assume that the automobiles and the brand directories are packaged together. In order for them to be considered a package, they must all have an init.py file, which may be either empty or filled with initialization code. Let’s pretend that all of the automobile models are made out of modular components. The use of packages simplifies the process of importing any modules, either individually or in bulk. Let’s say we want to purchase a BMW i8. ‘import’ Cars would be the proper syntax for this phrase. Bmw.x5 When importing a package or sub-package or module, Python searches the entire tree of directories for the specific package and then proceeds in a logical manner as programmed by the dot operator, as shown in the following example. If any module has a function that we wish to import, we must specify which module it is. As an example, if the a8 library has the method get buy(1) and we wish to import it, the syntax would be:import Cars. Audi.a8 Cars. Audi.a8.get buy(1) When utilizing only the import syntax, it is important to remember that the last attribute must be a subpackage or a module, and not a function or class name
- ‘from.import’ in Packages is an example of this requirement. For the time being, if we require the use of such a function, we must write the entire long line after first importing the parent package. We utilize the term ‘from’ to make this process a little more straightforward. To do this, we must first import the module into the database using the ‘from’ and ‘import’ commands: from Cars. Audi imports the a8 model. We can now call the function from any location by callinga8.get buy (1) There is an alternate route that is less time-consuming. In this case, we can simply import the function and utilize it anywhere we need it. To begin, import it using the following syntax: from Cars. Audi.a8 import get buy audi.a8 import get buy Now you may call the method from any location: Get the value of ‘from.import *’ in Packages using get buy(1). When we use the from.import syntax, we may import everything from submodules to classes, functions, and variables that are specified in the same module as the source code. An ImportError exception is thrown by the compiler if one of the attributes given in the import section is not declared in the package. It is possible that importing sub-modules will result in undesired side-effects, similar to those that occur when manually importing sub-modules. As a result, we may import many modules at the same time by utilizing the * syntax. The syntax is as follows: originating from Cars.Chevrolet import This will bring in everything from the sub-package, including modules, sub-modules, functions, and classes
Chinmoy Lenka has contributed an essay to this collection.If you enjoy GeeksforGeeks and would like to make a contribution, you may create an article using the contribute.geeksforgeeks.org website or send your article to [email protected] through email.See your article appear on the GeeksforGeeks main page and assist other Geeks by sharing it with them.Please leave comments if you see anything that is inaccurate or if you have further information to give regarding the subject matter addressed above.
In Python, what exactly is a ″package″?
Packages, modules, imports, oh my!¶
- Modules A python ″module″ is a single namespace that contains a collection of values such as functions, constants, class declarations, and practically any other type of value.
A module is typically represented by a single file, such as something.py.
A ″package″ is essentially the same as a module, with the exception that it can include other modules (and indeed other packages).A package is often represented by a directory including a file namedinit.py as well as any number of python files or additional package folders, as follows: a package init.py module a.py a package init.py a sub package module a.py init.py module b.py Theinit.py can be completely empty – or it can include any arbitrary python code that the user desires.When the package is imported, the code will be executed — unlike modules within packages, modules within packages are not immediately imported like modules within modules.As a result of the aforesaid structure, the code in a package/init.py will be executed.
There will be a list of names available in: but: will not exist if any names defined in init.py are available in: Submodules must be explicitly imported in order to be available: import a package.module a
The module search path¶
When you import a module or package, the interpreter maintains a list of all the locations where it checks for modules or packages: import sys for p in sys.path: import sys for p in sys.path: p a printout That list may be manipulated to add or delete routes, allowing Python to discover modules in a different location.Furthermore, every module has a filename that links to the directory in which it resides.This allows you to add pathways that are related to where you are, and so on.NOTE: It is normally preferable to use setuptools’ ″develop″ mode instead – see below for further information.
Building Your Own Package¶
Everything you need to know about creating your own package in its simplest form.
Why Build a Package?¶
Basic information on how to create your own package is provided here for reference.
What is a Package?¶
A collection of modules… a collection of modules… as well as the documentation… and the tests… as well as any top-level scripts… as well as any data files that may be necessary… as well as instructions on how to construct and install it…
Basic Package Structure:¶
CHANGES.txt is located at package name/bin/CHANGES.txt.LICENSE.txt is located in the docs/ directory.The MANIFEST.in file contains the README.txt file.The setup.py file contains the package name/ init.py module1.py module2.py test/ init.py test module1.py test module2.py Modifications.txt file contains the list of changes made with each release.
If you choose a license (and you should!), it will be in LICENSE.txt.MANIFEST.IN: a description of the non-code files that should be included in the project.
- A description of the package should be included in the README.txt file, which should be written in either ReST or Markdown (for PyPi): setup.py: This is the script that will be used to build and install the package.
- bin/: This is the directory containing the package.
- This is the location where you should place top-level scripts (some folks use scripts) docs/: the documentation package name/: the package name Main package – this is where all of the code will be stored.
- test/: the unit tests for your application.
- There are several options here: Place it inside the packaging – it is compatible.
- Install package name using pip, then import package name.test with pip, then package name.test.runall with pip () Alternatively, maintain it at the top of the hierarchy.
- Here are some thoughts on the subject: ‘ Where should the tests be placed’
The setup.py File¶
Your setup.py file explains your package and instructs setuptools on how to package, create, and install it. It is located in your home directory. Because it is written in Python, you may customize it anyway you see fit. However, in the most straightforward situation, it is effectively declarative.
What Does setup.py Do?¶
- Metadata about the version and package
- A list of the packages that should be included
- List of other files that should be included
- The following is a list of dependencies:
- If you are not using scikit-build, below is a list of the extensions that need to be compiled.
An example setup.py:¶
Importing setup setup(name=’PackageName’, version=’0.1.0′, author=’An Great Coder’, author email=’[email protected]’, packages=, scripts=, url=’licensing=’LICENSE.txt’, description=’An awesome package that does stuff’, long description=open) from setuptools is a simple way to get started.(‘README.txt’).read(), install requires=, and other functions Python tests [″Django >= 1.1.1″, ″pytest″,])
Provides a means of allowing the end user to personalize the installation in some way.It’s an ini style file with the following syntax: option=value.straightforward in both reading and writing build py, install) is one of the Distutils commands that command may be used with, and option is one of the parameters that command can be used with Note that an option with the command-line argument spelt -foo-bar is spelled foo bar in the configuration files.
Setuptools may perform a wide range of tasks when a setup.py script is provided, including: Creates a source distribution (a tar archive containing all of the files required to create and install the program) by doing the following: Wheels are constructed as follows: (This will only work if you have the wheel package installed:) Installing a wheel using pip Build from the ground up: And then there’s the installation:
Installing in ″developer″ or ″editable″ mode is as follows: or:
It’s incredibly, extremely good to be in development mode: Alternatively, run $ python setup.py develop or: (″editable″ is represented by the letter e; the two words mean the same thing.) It adds a link (really, a collection of *.pth files) to your code in the Python installation, allowing your package to be installed while any modifications are immediately effective.As a result, all of your test code, client code, and other code may all import your package in the usual way.There will be no system.path hacking.When working on anything that requires more than a single file, it’s a good idea to utilize it.
|Copies package into site-packages||Adds a.pth file to site-packages, pointed at package source root|
|Used when creating conda packages||Used when developing software locally|
|Normal priority in sys.path||End of sys.path (only found if nothing else comes first)|
Aside on pip and dependencies¶
- There is no solution for Pip at this time: pip may replace packages in your environment with versions that are incompatible with your environment. When this occurs, things will break
- proceed with caution (and, preferably, in disposable contexts) when using pip.
Getting Started With a New Package¶
For any script other than a single-file script (and maybe even then):
- Construct the skeleton of the package structure
- Create a setup.py file
- Pip install -e is equivalent to pip install -e.
- Put some tests in package/test
- run pytest in the test directory, or pytest -pyargs package name to see what happens.
Alternatively, use the ″Cookie Cutter″:
Exercise: A Small Example Package¶
- Create a simple package structure consisting of setup.py, python setup.py, and at least one functioning test.
Start with the ridiculous code in the instructional repo at: python-packaging-tutorial/setup example/, or you can download a zip file here: capitalize.zip to get you started: capitalize.zip
- Capitalize is a pointless little tool that capitalizes the first letter of each word in a text file. However, it follows the basic structure of a Python package: a library of ″logic code,″ a command-line script, a data file, and tests, among other things.
So let’s have a look at what’s inside: $ ls capital mod.pytest capital mod.py cap data.txt capital mod.pytest capital mod.py capital mod.py capital mod.py capital mod.py capital mod.py capital mod.py capital mod.py capital mod.py capital mod.py capital mod.py main.py cap script.pysample text file.txt main.py cap script.pysample text file.txt
What are these files?¶
Capital mod.py The primary logic code (main.py) is at the heart of the system.Test capital mod.py is a command-line application written in Python.Test code for the logic cap script.py top-level script cap data.txt data file sample text file.txt sample example file to test with cap script.py cap data.txt data file cap script.py cap script.py cap script.py cap script.py cap script.py cap script.py cap script.py cap script.py cap script.py cap script.p Try it out for yourself: cap script.py is located in the capitalize/ directory.sample text file.txt The following text has been capitalized and stored in sample text file cap.txt: Sample Text File I’m through with this.
As a result, it works as long as you are in the directory that contains all of the code.
Setting up a package structure¶
Create a simple package structure by following these steps: setup.py README.txt package name/ bin/ README.txt package name/ init.py module1.py test/ init.py test module1.py package name/ init.py module1.py Let’s put all of that together for capital: Create the package by following these steps: the command $ mkdir capitalize $ cd capitalize/ $ touchinit.py $ cd capitalize/ $ touchinit.py Insert the following code into it: $ mv./capital mod.py./ $ mv./capital mod.py./ $ mv./main.py./ mv./main.py Make a directory specifically for the tests: Transfer the tests to that location: the command $ mv./test capital mod.py the command Make a directory for the script in the following format: Insert the following script into that: $ mv./cap script.py bin $ mv./cap script.py bin Make a data directory for your information: Move the following information into that: Data may be found in $ mv./cap data.txt We now have a package in our possession!Let’s give it a shot: $ python bin/cap script.py $ python bin/cap script.py Traceback (from the most recent call to the most recent call): Line 8 of file ″bin/cap script.py,″ in the import capital mod statement ImportError: There is no such module as capital mod.That, unfortunately, did not work.What’s the harm in trying?
Everything has been rearranged, as follows: The modules are unable to communicate with one another.
Let’s Write a setup.py¶
!/usr/bin/env python from the setuptools command line Import setup setup(name=’capitalize’, version=’1.0′, list directories rather than files, list folders rather than files) packages=[‘capitalize’, ‘capitalize.test’], scripts=, package data=,) packages=[‘capitalize’, ‘capitalize.test’], scripts=, package data=,) packages=[‘capitalize’, ‘capitalize.test’], scripts=, package data=,) packages=[‘capitalize’, ‘capitalize.test’], scripts=, package data=,) packages (Keep in mind that a ″package″ is a folder containing the ainit.pyfile.) That’s pretty much the bare minimum you can do.Setup.py should be saved outside of the capitalized package directory.Install it in ″editable″ mode by following these steps: $ pip install -e./ $ pip install -e In order to obtain the URL file:/Users/chris.barker/HAZMAT/Conferences/SciPy-2018/PackagingTutorial/TutorialDay/capitalize, you must first navigate to the following path: When installing gathered packages, be sure to capitalize the first letter of each package name.Setup.py develop is being used for capitalization.
The capital has been successfully placed.Try it out for yourself: cap script.py is a Python script.In the file ″/Users/chris.barker/miniconda2/envs/py3/bin/cap script.py″, line 6, in the exec(compile(open)) function, there is a traceback to the previous call (file).
- the call to read(),file, and the command ‘exec’ File ″/Users/chris.barker/HAZMAT/Conferences/SciPy-2018/PackagingTutorial/TutorialDay/capitalize/capitalize/bin/cap script.py″, line 8, in import capital mod, in capital mod import capital mod import capital mod ModuleNotFound Error: There is no such module as ‘capital mod’.
- Why didn’t it work the second time?
- Some imports need to be updated, so please bear with us.
- The import main import capital mod line in cap script.py should read: from capitalize import main from capitalize import capital mod, and similarly in main.py: from capitalize import main from capitalize import capital mod.
- And give it a shot: cap script.py sample text file.txt $ cap script.py sample text file.txt Traceback (from the most recent call to the most recent call): File ″./cap script.py″, line 6, in exec(compile(open), in exec(compile(open), in (file).
- the call to read(),file, and the command ‘exec’ File ″./cap script.py,″ line 8, in from capitalize import capital mod, in from capitalize import capital mod Special words = load special words(get datafile name()) is defined at line 35 of the file ″/./capital mod.py.″ Open(data file name) as data file in file ″./capital mod.py″, line 21, in load special words with data file as open(data file name).
- FileNotFoundError: There is no such file or directory as ‘./capitalize/cap data.txt’ in the current directory.
- Our script is unable to locate the data file.
- We modified the location of the file, however we did not modify the path in the capital mod.py.
- Let’s get things sorted out.
- Line 32 should be replaced with: with: return Path(file).parent / ″cap data.txt″ in place of: return Path(file).parent / ″data/cap data.txt″ in place of: return Path(file).parent / ″data/cap data.txt″
Running the tests:¶
Option 1: Change directory to the test directory: The test session begins with $ cd capitalize/test/$ pytest $ pytest $ pytest $ pytest $ pytest $ pytest $ pytest $ pytest $ pytest $ pytest The following error occurred: test capital mod.py:14: in import capital mod EModuleNotFoundError: There is no such module as ‘capital mod’.We made a mistake here, and we need to rectify it as well: capital mod is imported from capitalize.And now we’re all set: $ pytest (python test) The test session begins ============================================================================================================= test capital mod.py was used to collect three things.============== 3 passed in 0.06 seconds, according to the clock.
============ You may also run the tests from any location on the command line, for example, as follows: capital $ pytest -pyargs capital capitalize/capitalize/test/test capital mod.py were gathered as three separate items.=============== 3 passed in 0.03 seconds, according to the clock.==========
Only the most basic of packages require more than just the Python standard library.
Requirements in setup.py¶
!/usr/bin/env python from distutils.core import setup setup(name=’mypkg’, version=’1.0′, list folders, not files packages=, install requires=,)!/usr/bin/env python from distutils.core import setup setup(name=’mypkg’, version=’1.0′, list folders, not files packages=, install requires
Requirements in requirements.txt¶
- A common blunder: requirements.txt is frequently corrupted as a result of pip freeze
- It was pinned down far too firmly.
- OK for environment creation, but not so good for packing
- Donald Stufft (PyPA): Abstract vs. Concrete dependencies
Requirements in setup.cfg (ideal)¶
My package is the name of the pkg. Attribute: src.VERSION version = attr: version click install requires to see what packages are needed In contrast to setup.py, which configures setup using setup cfg files, this is parse-able without execution.
Following that will be the creation of redistributable objects.
How to Build a Python package?
- In this tutorial, we’ll go through how to create a Python package from the ground up. Packages are nothing more than a collection of applications that are meant to carry out a certain set of tasks for the user (s). Packages are divided into two categories: built-in packages such as collection, datetime, sqlite, and so on
- and external packages such as flask, django, tensorflow, and so on.
Creating a package
First and foremost, we must consider how we will arrange our code so that others will be able to access its features. Making a package in Python is as simple as adding aninit.py to the directory where it will be used. We are going to create a package called test package in this section. Let’s create theinit.py file.
The following counter definition is imported from collections: c = Counter def count in list(l, word): (l) return the value of c In the meantime, create a directory named test package and place theinit.py file in there.That is all there is to it; our bundle is complete.All that our package does is keep track of the number of times a word appears in a list.Create a run.py file outside of the test package directory in order to make use of our package.
Simply import the newly formed package and call the count in list function from within the run.py file to complete the task.Using the code described below, we can accomplish our goal.
Count in listl = count from test package import count in listl = count from count in listl (l, ″gfg″) print(count) That’s all there is to it. We have recently completed the creation of our first bundle. The following is an example of how our directory structure should appear.
Package-folder run.py test package init.py package-folder There are two files in one directory. To try it out, simply put python3 run.py into your terminal. And our final product should look like this: We can use this method to develop a large number of complicated programs that can be used in other scripts.
Uploading our package
Now, let’s look at how we may get our package ready to be published to the PyPI repository.We’ll need several other files in our package folder, such as README.MD, LICENSE, and setup.py, to complete the installation.The following is the recommended structure for our code.the package-folder LICENSE the README.md the setup.py the test package the init.py the package-folder 1 directory and 4 files are contained within it.
Make careful to delete the previously produced run.py file, as it was only meant to be used for manual testing.For the LICENSE, we recommend that you go with the MIT LICENSE because it provides the greatest flexibility and freedom.On the internet, we may learn about the many sorts of licenses available.
- After that, you should construct the README.md file.
- A comprehensive description of the product would be contained inside it, on the whole.
- If you are unfamiliar with markdown-style writing, we recommend that you read this article.
- Once we have your README.md file ready, we will need to build the setup.py script to run it.
- This is the most significant section.
- Import setuptoolswith open(″README.md″, ″r″) as fh: Import setuptoolswith open(″README.md″, ″r″ as fh: description = fh.read()setuptools.setuptools.description The test package has the following attributes: ( name=″test-package,″ version=″0.0.1,″ author=″GeeksforGeeks,″ author email=″[email protected],″ packages=, description=″A sample test package,″ description=″A sample test package,″ long description=description, long description content type=″text/markdown,″ license=″MIT″, python requires=’>=3.8′, install requires=) It is necessary to replace theauthor with your own name in the code above.
- Author email should be replaced with your email address.
- Replace url with the GitHub URL of the package you’re working on
Our package has finally been completed.
Register our package to PyPI
Now that we’ve finished developing our Python package, we’ll need to submit it to the Python Package Index (PyPI).1.Upload the file to GitHub.To do this, we’ll create a new GitHub repository and upload all of our code to it.
In case you don’t know how to push code to a GitHub repository, you can refer to this page for instructions.Please remember to edit our URL in setup.py to reflect the newly generated URL for our GitHub repository as well.Our repository should be available to the whole public.
- Make a PyPI account by following these instructions.
- We want to publish the package to PyPI, thus we’ll need to create an account there.
- To do so, simply go to PyPI and register for an account with them.
- Creating distributions from scratch It is necessary to have distribution archives in order to host it as a package.
- Two extra packages must be installed in order for us to be able to produce these packages.
- pip3 install setuptools wheel setuptools wheel Now that they have been installed, use the following command to build archive files: Sdist bdist wheel python3 setup.py sdist It will create the directories build, dist, and test package.egg-info as a result of this operation.
- You should now have a directory structure that looks something like this.
- package-folder build bdist.linux-x86 64 lib test package init.py dist test package-0.0.1-py3-none-any.whl test-package-0.0.1.tar.gz test-package-0.0.1.tar.gz test package.egg-info LICENSE README.md setup.py init.py test package.egg-info dependency links.txt PKG-INFO SOURCES.txt top level.txt LICENSE README.md setup.py init.py init.py test package.egg-info There are 7 folders and 11 files in total.
- Deployment To make a submission to PyPI, click here.
- The twine package must be installed before we can proceed.
- twine pip3 installation Now, upload the package with the appropriate version stated in the setup.py file to your server.
- Run the following command to do this:twine upload -repository pypi dist/* That was everything there was to know about building and delivering packages in Python.
Using our package
We should be able to utilize the package after it has been built, don’t you think?After all, it was designed to allow developers to reuse the same logic across several codebases.Establish an entirely new directory and within it, create a virtual environment for your users to work in.To accomplish this, simply typepython3 -m venv env source env/bin/activate into your terminal.
Installing your freshly delivered package into the virtual environment is the next step.To be able to install it, you’ll need to utilize the pip package manager.install test-package with pip Let’s have a look at how we may make use of this package in our code.
- The concept is straightforward.
- After all, this is only a package, right?
- So all we have to do now is import it into the system as a package.
- count in list is imported from test package.
- We now have a clear understanding of our role.
- Let’s see if we can make use of it.
- output from print(count in list(, ″gfg″)): 2 Printing the count in list(, ″maths″) resulted in the following output: 0 That’s all there is to it.
- When we put it all together, we have
From test package, import count in listprint(count in list(, ″gfg″)), which prints the number of items in the list. ″maths″ is represented by the function print(count in list(, ″maths″)). Output: So that was the end of the process of creating a package and submitting it to PyPI.
How to Build Your Very First Python Package
I made the decision a few months ago to make Caer, a Computer Vision package available in Python, open to the public.Excruciatingly unpleasant, in my opinion, was the procedure.The reasons for this are presumably obvious: inadequate (and unclear) documentation, a dearth of useful tutorials, and so on.As a result, I decided to create this post in the hope that it may be of assistance to anyone who are having difficulty doing so.
We’re going to create a very basic module and make it open to everyone in the globe who is interested in it.The contents of this module are organized in a straightforward manner.There are a total of four Python files, each of which has a single method that is called by the others.
- For the time being, we’ll keep things as basic as possible.
- base-verysimplemodule-> Base verysimplemodule-> Actual Module extras multiply.py divide.py add.py subtract.py base-verysimplemodule-> Base verysimplemodule-> Actual Module You’ll see that I’ve created a subdirectory named verysimplemodule, which has two Python files, add.py and subtract.py, which you can see below.
- In addition, there is a folder titled extras (which contains multiply.py and divide.py).
- The contents of this folder will serve as the foundation for our Python module.
Bringing out theinit s
Aninit.py file is a common feature of every Python package, and you’ll find it in every one of them.This file will instruct Python to consider directories to be modules (or sub-modules).To put it another way, it will save the names of all the methods in all of the Python files that are located in its current directory.The following is the structure of a typicalinit.py file: technique of importing from a file ‘method’ is a function that may be found in the ‘file.py’ file, which is a Python script.
When creating Python packages, you must include aninit.py file in each sub-directory of the package you are creating.These sub-directories contain the sub-modules that make up your whole package.Under our scenario, we’ll place ourinit.py scripts in the ‘real module’ directory verysimplemodule, which will look something like: We’re going to do the same thing for the extras folder, as follows: from add import add from subtract import subtract and we’re going to do the same thing for the extras folder, as follows: import multiply from multiply import multiply import divide from divide import divide Once that is completed, we will have completed around half of the procedure!
How to set up setup.py
To complete the installation of our base-verysimplemodule folder (which is in the same directory as our module verysimplemodule), we must include the setup.py file.If you wish to create the real module in question, you will need this file to do so.Please keep in mind that you may name the setup.py file whatever you choose.This file does not have a name, unlike ourinit.py file, which has.
The names setup my very awesome python package.py and python package setup.py are both acceptable choices, but it’s usually best to stick with setup.py as a standard practice.In the setup.py file, you will find information about your package, such as the package’s name and version, as well as platform-dependencies and a whole lot more.Because we won’t be need any sophisticated meta information for our purposes, the following code should be suitable for the vast majority of packages you create: import setup, find packages, and find packages from setuptools AVERAGE VERSION = ‘0.0.1’ ″My very first Python package,″ says the author.
- LONG DESCRIPTION = ‘This is my first Python package, and it has a somewhat more detailed explanation.’ Setup (the name of the package must match the name of the folder’verysimplemodule’): name=″verysimplemodule,″ version=VERSION, author=″Jason Dsouza,″ author email=″″, description=DESCRIPTION, long description=LONG DESCRIPTION, packages=find packages(), install requires=, add any additional packages that need to be installed along with your package name=″verysimplemodule For example: ‘caer’ keywords=, classifiers=, etc.
- [ Its development status is 3 – Alpha, and its intended audience is education.
- Its programming language is 2; its programming language is 3; its operating system is MacOS X; its operating system is Microsoft Windows; and it’s intended audience is education.
- Having completed this step, all that remains now is for us to run the following command in the same directory as base-verysimplemodule: setup.py is a Python script.
- bdist wheel sdist sdist bdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sdist sd All of the essential Python packages will be created as a result of this operation.
- A source distribution and a wheel will be created using the sdist and bdist wheel commands, which you can then publish to PyPi.
PyPi — here we come!
PyPi is the official Python repository, which contains all of the Python packages available for download.You may think of it as the Github for Python Packages, or something along those lines.If you want to make your Python package available to people all around the world, you’ll need to sign up for a PyPi account first.After we’ve completed this step, we’ll be ready to post our package to PyPi.
Remember the source distribution and wheel that were created when we ran python setup.py?Do you remember how to use them?Those are the files that will be posted to the PyPi repository.
- You will need to install twine first, if you do not already have it installed, in order to complete this task.
- It’s as simple as pip install twine to get started.
How to upload your package to PyPi
Assuming you have twine installed, you may proceed as follows: upload dist/twine twine upload dist This command will upload the contents of the dist folder, which was automatically created when we ran the python setup.py script earlier in this tutorial.Enter your PyPi username and password into the appropriate fields when prompted.It’s possible that if you’ve followed this instruction to the letter, you’ll receive an error message saying that the repository already exists.This is most often caused by a name conflict between the name of your package and the name of another package that already exists.
To put it another way, you should modify the name of your product since someone else has already claimed that name.That’s all there is to it!Installing your module using pip is straightforward.
- Simply open a terminal and type: pip install (in our instance, pip install verysimplemodule) on the command line.
- Check here how Python neatly installs your package from the binaries that were created previously in this tutorial.
- Start by launching a Python interactive shell and attempting to import your package: >> verysimplemodule is imported as vsm, and then vsm.add is called (2,5) 7 >> vsm.subtract is a subtraction function (5,4) 1 To gain access to the division and multiplication methods (which were previously located in a subdirectory called extras), perform the following commands:>> import verysimplemodule as vsm >> vsm.extras.divide(4,2) 2 >> vsm.extras.multiple vsm.extras.multiple (5,3) 15 That is all there is to it.
- You’ve just completed the development of your first Python package.
- Your product, despite its simplicity, is now available for download by anyone anywhere in the globe (so long as they have Python, of course).
Basic mathematical operations like as addition, subtraction, multiplication, and division were performed using a very simple module in this course – the package we used was incredibly simple.It’s not a good idea to post them directly to PyPi, especially if this is your first time doing something like this.Thanks to Test PyPi, a distinct instance of PyPi where you may test and experiment with your package, we don’t have to worry about breaking anything (you will need to sign up for a separate account on the platform).The procedure that you must follow in order to upload to Test PyPi is nearly identical to the procedure that you must follow in order to publish to Production PyPi.
When you run the following command, the package will be uploaded to Test PyPi.You will be prompted to enter your Test PyPi credentials on the next page.testpypi dist/* twine upload -repository testpypi To download projects from Test PyPi, run the following command: pip install -index-url ″ Information about the information
The meta information that we included in the setup.py file was quite simple and straightforward. In addition, you may provide information such as numerous maintainers (if any), author email, licensing information, and any number of other details. If you want to do so, the information in this post will be extremely beneficial.
Look at other repositories
Studying the methods used by other repositories to construct their packages might be quite beneficial to you.In the course of developing Caer, I was continually examining the way Numpy and Sonnet built up their packages.It is recommended that you have a look at the Caer’s, Numpy’s, and Tensorflow’s repository if you want to create packages that are a little more complex than the ones provided by Caer.Learn how to code for nothing.
More than 40,000 people have benefited from freeCodeCamp’s open source curriculum, which has helped them land jobs as developers.Get started today.
How To Package And Distribute Python Applications
To ensure that any Python libraries (also known as application packages) that you download using a package management (for example, pip) are distributed correctly, the Python development team created an official distribution tool.These tools allow you to construct ″Python distributions,″ which are essentially versioned (and compressed) archives of the Python programming language.It contains all of the associated aspects to the thing that’s being distributed, such as source files and resource files, all in one place.For the purpose of this DigitalOcean article, we’ll go over the distribution tools you’ll need, as well as the key steps that will allow you to package your own useful libraries, modules, or applications – which will be useful when you’re deploying your project to droplets or sharing it on the internet.
Python Distributions and Packages
It is unlikely that you are unfamiliar with the notion of utilizing a package manager (e.g., pip, easy install) to obtain modules and libraries (e.g., application development frameworks), which are then imported and utilized to construct a new application.Locally installed package management tools link to an external source (e.g.the Python Package Index – PyPI) and carry out a desired action (e.g.search and install) while working with these resources, which are actually referred to as Python distributions in this context.
An program’s directory is wrapped with certain required files (as well as some recommended ones), and associated components (e.g.resources, dependencies, and so on) are specified before the application is released or used elsewhere…really it’s that easy.Take note that you are strongly urged to work with virtual environments to segregate Python downloads, modules, and apps with which you are interacting while developing.
In Python, a package is a directory that may be imported (withinit.py) and contains source files (i.e.modules).This is not to be confused with operating-system packages, which are genuine apps in their own right (i.e.a Debian package).
However, it should be noted that Python distributions are sometimes referred to as packages in some cases.The following is an example of package structure: package ||-init.py is a Python script that allows you to get started quickly.
The term ″application″ in Python can refer to anything from a single file to a collection of hundreds of files spread across many packages.However, in most actual circumstances, an application will consist of numerous modules and a significant number of external imports (from libraries).The following is an example of an application structure: —init.py — amodule.py — anothermod.py —tests —|—init.py ———————————————————————————————
Python Distribution Tools and Libraries
The term ″application″ in Python can refer to anything from a single file to a collection of hundreds of files dispersed over many packages.However, in most actual circumstances, an application will consist of numerous modules and a significant number of external imports (from libraries).A sample application structure might be as follows.—init.py — amodule.py — anothermod.py —tests —|
Python Package Index (PyPI)
The Python Package Index, sometimes known as PyPI, is a central repository for projects written in Python (Python distributions). This repository is used by package management systems like as pip in order to host, find, and install the packages.
Let″s start by constructing a simple, generic Python flask application, which we will then utilize to package the rest of the application.
Creating the Application Structure
We want to design a model that is representative of the majority of real-world initiatives. As a result, it will be most effective to envision a scenario with modularized components. A sample structure is: /MyApplication |- run.py |- config.py |/app |-init.py |- /module one |-init.py |- controllers.py |-models.py |/templates |- hello.html |/static
Create the folders:
Make app/MyApplication cd/MyApplication make run.py make config.py mkdir app/MyApplication cdapp touchinit.py mkdir templates mkdir static mkdir module one cdmodule one touchinit.py touch controllers.py touch models.py cd./templates mkdir module one cdmodule one touchinit.py touch controllers.py touch models.py cd./templates mkdir module one cdmodule one touch hello.html
Edit run.py using nano:
/MyApplication/run.py /MyApplication/run.py Organize the contents as follows: Start a test server and see how it works. import app from app app import app from app run(debug=True) Save and quit with the CTRL+X keyboard shortcut, then confirm with the Y key.
Edit config.py using nano:
/MyApplication/config.py is a Python configuration file. Organize the contents as follows: DEBUG is set to true, THREADS PER PAGE is set to four, CSRF ENABLED is set to true, and CSRF SESSION KEY is set to ″secret.″ Save and quit with the CTRL+X keyboard shortcut, then confirm with the Y key.
Edit app/init.py using nano:
Init.py /MyApplication/app/ init.py nano init.py Organize the contents as follows: import data from flask php, Flask, render template app = Flask(name); app.config.from object(″config″); from app.module one.controllers; php, Flask, render template module one app.register blueprint(module one) import module one Save and quit with the CTRL+X keyboard shortcut, then confirm with the Y key.
Edit app/module_one/controllers.py using nano:
In the /MyApplication/app/ init.py directory, run the following command: nano.Fill in the blanks with the following information:.import data from flasks php, Flask, render template app = Flask(name); app.config.from object(″config″); from app.module one.controllers php, Flask, render template app add the following import module one app.register blueprint(module one) if it is not already there Make a backup and quit using the CTRL+X key combination, followed by a Y confirmation.
Edit app/templates/module_one/hello.html using nano:
Beginning with Application Distribution / Packaging
After constructing a sample application structure for a web site that makes use of flask, we may proceed to the next stage, which is creating the distribution.
Altering the Folder Structure
To properly package our application, we must make some changes to our folder structure./MyApplication |- run.py |/app |-init.py |- /module one |-init.py |- controllers.py |- models.py |/templates |- module one |- hello.html |/static |- setup pyDistribution setup file |- README.txt |- setup pyDis Readme file |- MANIFEST.inDistribution manifest file |- CHANGES.txt Changes to the manifest file Alter the folder structure in order to produce the relevant files: Changes log the following commands: touch /MyApplication/setup.py the following commands: touch /MyApplication/README.py the following commands: touch a touch /MyApplication/MANIFEST.py the following commands: a touch a touch a touch a touch a touch a touch
Create the setup.py
Setup.py in /MyApplication/setup.py Fill in the blanks with the self-explanatory text shown below: from distutils.core import setup setup(Application name: name=″MyApplication″, Version number (initial): 1.0; from distutils.core import setup setup(Application name: name=″MyApplication″, Version number (initial): 1.0; from distutils.core import setup setup(Application name: name=″MyApplication″, Version number (initial): 1.0; from distutils.core import setup setup( version=″0.1.0″, Author information for the application: author=″name surname″, author email=″[email protected]″, author name=″[email protected]″ packages=, packages=, packages=, packages=, packages=, Additional files to include in the bundle are as follows: _package data=True, Details url=″LICENSE.txt″, description=″Useful towel-related things.″, long description=open, license=″LICENSE.txt″, license=″LICENSE.txt″ (″README.txt″).read(), Packages that are dependent on one another (distributions) install requires=[″flask″,],) Save and quit with CTRL+X, and confirm with Y to complete the installation.
Create the MANIFEST.in
If you need to send other f