0% found this document useful (0 votes)
79 views23 pages

Building A Python Package in Minutes - Analytics Vidhya - Medium

The document discusses how to build a Python package in minutes. It covers getting started with the necessary tools, building the package structure and files, and uploading the package. The process seems straightforward with just a few key files and folders needed to create a basic but functional Python package.

Uploaded by

coachbiznesu
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
0% found this document useful (0 votes)
79 views23 pages

Building A Python Package in Minutes - Analytics Vidhya - Medium

The document discusses how to build a Python package in minutes. It covers getting started with the necessary tools, building the package structure and files, and uploading the package. The process seems straightforward with just a few key files and folders needed to create a basic but functional Python package.

Uploaded by

coachbiznesu
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
Download as pdf or txt
You are on page 1/ 23

Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.

2020, 17:55

Building a Python Package in


Minutes
Abideen Opeyemi Bello(bideen) Follow
Apr 7 · 7 min read

“ Sometimes while you are so passionately busy building,


there will be others as busy destroying. Do not stop. One day
you will notice how high above you get, and how down below
they end up ”

― Sameh Elsayed

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 1 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

https://scitechdaily.com/mit-develops-machine-learning-tool-to-make-code-run-faster/

The process of building a package is somewhat tedious, but it is


worth it in the long run. Just imagine if some haven't built
those packages been used now, how would programming have
been, most especially for the Data scientists.

I actually saw the need to put this piece out, so as to help new
data scientist, programmers and other code users in the python
world to help ace the process of writing some lines of code for
every project, why don't you just make it a package and reuse
whenever you like.

So this article aims to put yours through the basics on what and
how you need to build a python package using a case study of a
new distribution package I built. the process is going to be
listed using the following outlines below:

Getting Started

Build the Python Package

Upload the python package

Conclusion

. . .
https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 2 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

Getting started

Photo by Ivan Zhukevich on Unsplash

At Crst, you will surely need to set up one or more things to get
you in line on how to build a python package. so the list of
things need are highlighted as follows:

IDE(Vs code)

Python 3

The preferred IDE used for this process is Vscode and Python 3.
make sure these two things are well connected, if having any

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 3 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

diJculty, click here. Now we move to the next section without


wasting any more time, Lets Build.

. . .

Build the Python Package


The package built in this article is called b_dist. b_dist is a
distribution package which has classes like Gaussian, Binomial,
e.t.c. But Crst, create the package folder using the following
map structure:

b_dist/
__init__.py
Binomialdistribution.py
Guassiandistribution.py
Generaldistribution.py
licence.txt
setup.cfg
README.md
setup.py

First, you will have to create an empty Cle of those listed above
in the map. Note b_dist is a folder and setup.py with
README.md is not in b_dist folder, otherwise, click here to see
a clearer picture.

Let talk about the distribution folder Crst then the setup Cle as
follows:

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 4 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

b_dist/__init__.py

from .Guassiandistribution import Guassian


from .Generaldistribution import Distribution
from .Binomialdistribution import Binomial

This Cle tells python that this folder contains a package. Also, a
package always consists of an init Cle even if it is empty. the
code __init__ Cle gets to run whenever you Import a package
inside a python program. In this case, the __init__ Cle is
importing the Gaussian, Binomial and Distribution model so as
to import these classes directly when using the package.

b_dist/Binomialdistribution.py

1 import math
2 import matplotlib.pyplot as plt
3 from .Generaldistribution import Distribution
4
5 class Binomial(Distribution):
6 """ Binomial distribution class for calculating and
7 visualizing a Binomial distribution.
8
9 Attributes:
10 mean (float) representing the mean value of the distribution
11 stdev (float) representing the standard deviation of the distribution
12 data_list (list of floats) a list of floats to be extracted from the data fi
13 p (float) representing the probability of an event occurring
14 n (int) number of trials
15
16
17 TODO: Fill out all functions below
18

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 5 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

19 """
20
21
22 def __init__(self, prob=.5, size=20):
23
24 self.n = size
25 self.p = prob
26
27 Distribution.__init__(self, self.calculate_mean(), self.calculate_stdev
28
29
30
31 def calculate_mean(self):
32
33 """Function to calculate the mean from p and n
34
35 Args:
36 None
37
38 Returns:
39 float: mean of the data set
40
41 """
42
43 self.mean = self.p * self.n
44
45 return self.mean
46
47
48
49 def calculate_stdev(self):
50
51 """Function to calculate the standard deviation from p and n.
52
53 Args:
54 None
55
56 Returns:
57 float: standard deviation of the data set
58
59 """
60
https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 6 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

60
61 self.stdev = math.sqrt(self.n * self.p * (1 - self.p))
62
63 return self.stdev
64
65
66 def replace_stats_with_data(self):
67
68 """Function to calculate p and n from the data set
69
70 Args:
71 None
72
73 Returns:
74 float: the p value
75 float: the n value
76
77 """
78
79 self.n = len(self.data)
80 self.p = 1.0 * sum(self.data) / len(self.data)
81 self.mean = self.calculate_mean()
82 self.stdev = self.calculate_stdev()
83
84
85
86 def plot_bar(self):
87 """Function to output a histogram of the instance variable data using
88 matplotlib pyplot library.
89
90 Args:
91 None
92
93 Returns:
94 None
95 """
96
97 plt.bar(x = ['0', '1'], height = [(1 - self.p) * self.n, self.p
98 plt.title('Bar Chart of Data')
99 plt.xlabel('outcome')
100 plt.ylabel('count')
101
102
https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 7 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

102
103
104 def pdf(self, k):
105 """Probability density function calculator for the gaussian distribution.
106
107 Args:
108 x (float): point for calculating the probability density function
109
110
111 Returns:
112 float: probability density function output
113 """
114
115 a = math.factorial(self.n) / (math.factorial(k) * (math.factorial
116 b = (self.p ** k) * (1 - self.p) ** (self.n - k)
117
118 return a * b
119
120
121 def plot_bar_pdf(self):
122
123 """Function to plot the pdf of the binomial distribution
124
125 Args:
126 None
127
128 Returns:
129 list: x values for the pdf plot
130 list: y values for the pdf plot
131
132 """
133
134 x = []
135 y = []
136
137 # calculate the x values to visualize
138 for i in range(self.n + 1):
139 x.append(i)
140 y.append(self.pdf(i))
141
142 # make the plots
143 plt.bar(x, y)

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 8 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

144 plt.title('Distribution of Outcomes')


145 plt.ylabel('Probability')
146 plt.xlabel('Outcome')
147
148 plt.show()
149
150 return x, y
151
152 def __add__(self, other):
153
154 """Function to add together two Binomial distributions with equal p
155
156 Args:
157 other (Binomial): Binomial instance
158
159 Returns:
160 Binomial: Binomial distribution
161
162 """

The binomial Cle is class for calculating and visualizing a


binomial distribution.

b_dist/Guassiandistribution.py

1 import math
2 import matplotlib.pyplot as plt
3 from .Generaldistribution import Distribution
4
5 class Guassian(Distribution):
6
7 """Guassian distribution class for calculating and visualizing a Guasian distrib
8 Attributes:
9 Attributes:
10 mean (float) representing the mean value of the distribution
11 stdev (float) representing the standrd deviation of the distribution
12 data_list (list of floats) a list of floats extracted from the data file
13

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 9 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

14 """
15 def __init__(self,mu=0,sigma=1):
16
17 Distribution.__init__(self, mu, sigma)
18
19 def calculate_mean(self):
20
21 """Function to calculate the mean of the data set.
22 Args:
23 None
24 Returns:
25 float: mean of the data set
26
27 """
28
29 avg = 1.0 * sum(self.data) / len(self.data)
30
31 self.mean = avg
32
33 return self.mean
34
35 def calculate_stdev(self, sample=True):
36
37 """Function to calculate he standard deviation of the data set
38 Args:
39 sample (bool): whether the data represents a sample or population
40 Returns:
41 float: stantard deviation of the data set
42 """
43
44 if sample:
45 n = len(self.data) - 1
46 else:
47 n = len(self.data)
48
49 mean = self.calculate_mean()
50
51 sigma = 0
52
53 for d in self.data:
54 sigma += (d-mean) ** 2
55

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 10 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

55
56 sigma = math.sqrt(sigma / n)
57
58 self.stdev = sigma
59
60 return self.stdev
61
62
63 def plot_histogram(self):
64 """Function to output a histogram of the instance variable data using matplo
65 Args:
66 None
67 Returns:
68 None
69 """
70
71 plt.hist(self.data)
72 plt.title('Histogram of Data')
73 plt.xlabel('data')
74 plt.ylabel('count')
75
76
77 def pdf(self, x):
78 """Probability desity function calculator for the guassian distribution
79 Args:
80 x (float): point for calculating the probability density function
81 Returns:
82 float: probability density function output
83
84 """
85
86 return (1.0 / (self.stdev * math.sqrt(2*math.pi))) *math.exp(-0.5
87
88 def plot_histogram_pdf(self, n_spaces=50):
89
90 """Function to plot the normalized histogram of the data and probability den
91 Args:
92 n_spaces (int): number of data points
93 Returns:
94 list: x values for the pdf plot
95 list: y values for the pdf plot
96 """
97
https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 11 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

97
98 mu = self.mean
99 sigma = self.stdev
100
101 min_range = min(self.data)
102 max_range = max(self.data)
103
104 # Calculates the interval between x values
105 interval = 1.0 * (max_range - min_range) / n_spaces
106
107 x = []
108 y = []
109
110 # calcilates the x values to visualize
111 for i in range(n_spaces):
112 tmp = min_range + interval * 1
113 x.append(tmp)
114 y.append(self.pdf(tmp))
115
116 # make the plots
117 fig, axes = plt.subplots(2, sharex=True)
118 fig.subplots_adjust(hspace=.5)
119 axes[0].hist(self.data, density=True)
120 axes[0].set_title('Normed Histogram of Data')
121 axes[0].set_ylabel('Density')
122
123 axes[1].hist(x, y, density=True)
124 axes[1].set_title('Normal Distribution for \n Sample Mean and Sample Standar
125 axes[1].set_ylabel('Density')
126 plt.show()
127
128 return x, y
129 def __add__(self, other):

The Gaussian Cle is class for calculating and visualizing a


Gaussian distribution.

b_dist/Generaldistribution.py

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 12 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

1 class Distribution:
2
3 def __init__(self, mu=0, sigma=1):
4 """ Generic distribution class for calculating and visualizing a probaility d
5 Attributes:
6 mean (float) representing the mean value of the distribution
7 stdev (float) representing the standrd deviation of the distribution
8 data_list (list of floats) a list of floats extracted from the data file
9 """
10
11 self.mean = mu
12 self.stdev = sigma
13 self.data = []
14
15 def read_data_file(self, file_name):
16
17 """Function to read in data from a textfile. The text fuile should have one n
18 Args:
19 file_name (string): name of the file to read from
20
21 Returns:
22 None
23 """
24
25 with open(file_name) as file:
26 data_list = []
27 line = file.readline()
28 while line:
29 data_list.append(len(line))

The General distribution Cle is class for calculating and


visualizing a probability distribution.

b_dist/licence.txt

Copyright (c) 2020 The Python Packaging Authority

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 13 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

Permission is hereby granted, free of charge, to any


person obtaining a copyof this software and associated
documentation files (the "Software"), to dealin the
Software without restriction, including without
limitation the rightsto use, copy, modify, merge,
publish, distribute, sublicense, and/or sellcopies of the
Software, and to permit persons to whom the Software
isfurnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice


shall be included in allcopies or substantial portions of
the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY


KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHERLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM,OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THESOFTWARE.

The licence Cle actually contains your copyright information,


stating your intention about giving Permission to other users,
so as to use your package freely.

b_dist/setup.cfg

[metadata]description-file = README.md

The setup.cfg Cle is a Cle that holds the data of your README
Cle.

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 14 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

README.md

This is a distribution class for calculating and


visualizing a probaility distribution.

It consist of two functions for now which are

### Installation

pip install b_dist

### Example

from b_dist import Guassian


In: Guassian(10,7)
Out: mean 10, standard deviation 7

This is the documentation of the package. it describes how the


Package works.

setup.py

1 from setuptools import setup


2
3 # read the contents of your README file
4 from os import path
5 this_directory = path.abspath(path.dirname(__file__))
6 with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f:
7 long_description = f.read()
8
9 setup(name='b_dist',
10 version='0.4',
11 description='Gaussian distributions',
12 packages=['b_dist'],

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 15 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

13 author='Abideen Bello',
14 author_email='abideen.datascienceofficial@gmail.com',
15 long_description=long_description,
16 long_description_content_type='text/markdown'

The setup.py Cle is necessary for pip installing the package.


Also, it contains the metadata about the package. Take note of
the following attributes like name and packages. this attributes
must have the same value as the folder name ‘b_dist’, so as to
free of bugs while uploading our package.

. . .

Now that we are almost done with the Crst part, let's run our
package locally Crst by typing the code below:

# change directory to where the setup file and the


package is located

~$ cd python_package

~/python_package:$

# Install the package locally


# NOTE:pip install . installs any setup.py file in that
directory.

~/python_package:$ pip install .

After typing this should be the output:

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 16 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

Processing /python_package
Building wheels for collected packages: b-dist
Building wheel for b-dist (setup.py) ... done
Created wheel for b-dist: filename=b_dist-0.4-py3-none-
any.whl size=5108
sha256=d4c6f74daa1add07f37b01a74294e86ab07d655a6e0944bbb4
6ed6503ae493ef
Stored in directory: /tmp/pip-ephem-wheel-cache-
3pvdd9ue/wheels/1e/f9/a3/568195cccd4e2d1dcb1edaf9c2708f65
1b90b6af6fbdfd3f36
Successfully built b-dist

Finally, our package is been installed. let’s test to see if it works


by typing the code below:

# open the python shell


In[1]: /python_package$ python

Out[1] Python 3.7.3 (default, Mar 27 2019, 22:11:17)


[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more
information.
In[2] >>>from b_dist import Guassian

In[3] >>> Guassian(10,5)

Out[3] mean 10, standard deviation 5

Great!!!, Now that our Package is working, let’s move on to the


second part.

. . .

Upload the Python Package


https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 17 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

Upload the Python Package

https://blog.sngine.com/how-to-handle-uploading-in-sngine/

Uploading the newly built package will be fast-tracked using


the PyPI. But Crst what is PyPi. PyPi stands for The Python
Package Index (PyPI) which is the repository of software for the
Python programming language.

So now will be uploading our package to the test version of


PyPI site, in other to be sure if the pip installation process works
correctly, then you now upload to the PyPi site.

First, create an account with the Test.PyPi and PyPi using the
same username and password for both sites. the following
article should put through the registration:

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 18 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

Create an account
Skip to main content You are using TestPyPI - a separate
instance of the Python Package Index that allows you to…
try…
test.pypi.org

Create an account
The Python Package Index (PyPI) is a repository of
software for the Python programming language.
pypi.org

After successfully creating the two accounts, let’s head back to


our IDE and upload our package to the TestPyPi. But Crst, to
communicate to these sites, you will need to pip install a library
called twine using:

pip install twine

So, after install twine, enter the following codes to upload Crst
to TestPyPi:

# Creating the distribution package to be uploaded


~/python_package:$ python setup.py sdist

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 19 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

You will see two new folders after entering the code, then move
to the next line of code:

# Upload the package created using twinw


~/python_package:$ twine upload --repository-url
https://test.pypi.org/legacy/ dist/*

Output: Uploading distributions to


https://test.pypi.org/legacy/
# enter your username and password used in registraion to
the site
Output: Enter your username : bideen
Output: Enter your password : ########

After entering your password, then you will see a successful


message saying “ Uploading package_name 100% successful”.
To check if uploaded successfully, got to your TestPyPi account
and see your new package.

Now pip install from the TestPyPi site using this code:

# first uninstall the previuos package on to aviod


conflicts
~/python_package:$ pip uninstall b_dist

# install fro the TestPyPi


~/python_package:$ pip install --index-url
https://test.pypi.org/simple/ b_dist

After the successful, code integration TestPyPi, let’s proceed to


now Uploading to the main PyPi where it can be pip installed

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 20 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

directly with the package name and also used publicly.

# first uninstall the previuos package on to aviod


conflicts
~/python_package:$ pip uninstall b_dist

# install fro the TestPyPi


~/python_package:$ pip install b_dist

Congratulations, you have successfully built a python package.


Now check your newly uploaded package on pypi.org

Conclusion

Photo by Kelly Sikkema on Unsplash

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 21 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

In conclusion, this article is to let you know the basics of what


and how a python package is built and uploaded to the PyPi
repository. Thou, I assume you must have encountered
numerous bugs, in which I also encountered some bugs but
thanks to Google it was Cxed.

So in lieu of this, I believe this should be a challenge to you in


building a solution package, not just any package, so as to we
make the world a better place for all.

Thank you.

please drop your feedbacks via my mail


abideen.datascienceo6cial@gmail.com

Python ArtiMcial Intelligence Data Science Machine Learning

Python Programming

Discover Medium Make Medium Explore your


Welcome to a place where yours membership
words matter. On Medium, Follow all the topics you Thank you for being a
smart voices and original care about, and we’ll member of Medium. You
ideas take center stage - deliver the best stories for get unlimited access to
with no ads in sight. Watch you to your homepage and insightful stories from
inbox. Explore amazing thinkers and
storytellers. Browse

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 22 z 23
Building a Python Package in Minutes - Analytics Vidhya - Medium 07.04.2020, 17:55

About Help Legal

https://medium.com/analytics-vidhya/building-a-python-package-in-minutes-7bb702a6eb65 Strona 23 z 23

You might also like