Write Pythonic Code Like a Seasoned Developer Transcripts
Chapter: Modules and Packages
Lecture: State your requirements
Login or
purchase this course
to watch this video and the rest of the course contents.
0:01
One of the challenges of deploying your code, your set of Python scripts, to run on other systems, is to communicate exactly what you depend upon,
0:10
so that you make sure that that system has the right things installed. We saw that virtual environments allow you to control this,
0:17
but how do you state it, how do you help someone grabbing your library or your app know what they've got to install? Let's look at that.
0:25
Over here I have a little app, it's going to do some downloading and it's using 3 packages,
0:29
now these would be interspersed throughout your app of course, right, but in this case, we just have them listed here.
0:36
So we are using a request to download some the homepage in Google, show the status code, imagine somewhere else using records for SQL,
0:43
over here we are using user accounts and correct hashing with passlib and so on. So if I run this in PyCharm, on my system, it works great,
0:51
I've got 200 back from Google. Let's imagine I was going to take the same code and run it somewhere else; to simulate running it on another machine,
1:00
let me go to that virtual environment we created before and I'll just activate it, so I'll say ".user/screencaster/Python_environments"
1:06
this is what I created, I'll say "activate", OK the prompt changes, now if I say "pip list", you'll see I don't have all the things we need,
1:14
I do have requests but I don't have records or passlib, let me see what happens if I try to run that program.
1:22
So we are going to run it and oh, that didn't go so well, I guess we needed records, we would go "pip install records" and we tried again,
1:30
we'd see passlib and that's because- and that would be actually the easy case because it's all in one file, but normally,
1:36
it would be spread out so eventually you would get to some action that import a module that "oh, well that crashes too"
1:42
because there is some other missing piece. So how do we solve this? It's quite simple, we can come over here and I would put whatever my code is,
1:50
I want to run, I would give it a requirements.txt. and in here, the format is super simple, you just list the names,
1:59
one per line, of the packages you depend upon, so if I copy this and I come back over to my "other system" where I have, remember,
2:11
I am using this pip from here, if I say "pip install -r" for requirements file and I give it that,
2:20
it's going to look at all the requirements we've specified, download them, and make sure the system is ready to roll.
2:30
As long as I have kept that requirements file, up to date with what my app actually uses, we're good.
2:36
And PyCharm if we are working in certain types of environments, actually is really good about managing that for us,
2:42
if it sees you work inside of a package like say a pyramid web app, and it sees you using some external package,
2:47
that is not listed in your setup install requirements it'll actually automatically put them there for you.
2:52
OK, so now if we say "pip list", this looks like a much better chance, let's try running our little app again, we should just see 200
3:00
as it talks to Google and gets good response code, server says: 200. So that's the requirement.txt file, add all of your requirements to it,
3:10
just one package name per line and then "pip install -r requirements.txt". In a graphic, our app is using some external modules, or external packages,
3:20
here we are just showing requests, in order for this script to run at all,
3:24
we are going to need a request installed on the system that's going to be running it. How do we communicate that?
3:29
Well, we have our requirements.txt that lists out our various requirements, then we "pip install -r", give it the requirements text file and boom,
3:38
problem solved.