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