Brought to you by Michael and Brian - take a Talk Python course or get Brian's pytest book


Transcript #208: Dependencies out of control? Just pip chill.

Return to episode page view on github
Recorded on Wednesday, Nov 11, 2020.

00:00 Hello and welcome to Python Bytes where we deliver Python news and headlines directly to your earbuds.

00:05 This is episode 208 recorded November 11th 2020.

00:09 I am Brian Okken and I'm Michael Kennedy and it's getting cold outside.

00:13 It is getting cold outside. I feel like winter is coming.

00:17 I went out on the deck and I'm like, well, there's something wrong with my deck. It's really slippery. Oh, that's ice. What a weird time of year it is.

00:23 Who do I call to get this fixed?

00:25 Exactly.

00:25 There's got to be some sort of contractor I can get to.

00:27 I'm sure there's something wrong with the sun.

00:29 We're going to need some help here.

00:30 Yeah.

00:30 This episode is brought to you by us.

00:32 We'll tell you more about what we're doing other than how you can support us a little later.

00:37 But first I want to, speaking of cold, I want to talk about something called pip Chill.

00:42 Ooh, I see.

00:44 Have you heard of this before?

00:45 I have heard of this.

00:46 I've just heard of it, but it looks fantastic.

00:49 Yeah.

00:49 It drives me crazy.

00:50 this whole new change with pip, where pip is super, super picky about the dependencies.

00:56 And then having things like dependabot or other automatic tooling upgrade stuff as things come out, if they ever get out of sync, then pip will break in some ways, like for example, Boto3 and BotoCore have been driving me crazy.

01:08 And it sounds like this would fix it.

01:09 Normally, you build up, you got like a requirements.txt file, or you got your, the versions that you're working with, you want to put those in a setup or some sort of way to capture it.

01:20 One of the ways you can do that is pip freeze.

01:22 And if you already have an environment, like a virtual environment set up, with everything you need, you say pip freeze, it spits out all of the things that you have installed and all the versions that you've got.

01:33 Now there's different variants that you can do with pip freeze also.

01:37 You know, people often talk about that as having stability.

01:40 Like you don't accidentally get a change that's pushed in the future that's a breaking change.

01:44 And to me, I never appreciated that.

01:46 Like that never seemed to be something I cared about.

01:48 But once things like GitHub started saying, there's a new version of this, or the thing you have installed, there's a security vulnerability that if you don't upgrade, you're subject to on the web, which is a bad place to be.

02:02 Then putting that version information in there explicitly allowed me to know, oh, I need to go and update the server because there's this critical vulnerability that GitHub told me about.

02:11 That's what won me over to putting the pip freeze style with versions in there.

02:15 Oh, yeah. Yeah. And I think that's good.

02:17 But you might want to just have the version, the thing that you're really using.

02:23 Like, let's say you're using black.

02:26 Do you want to list black or do you want to list black and all of its dependencies?

02:30 Yeah, exactly.

02:31 And Freeze just gives you everything.

02:33 And so what pip chill does is it just shows you the stuff that you installed.

02:39 So, like, let's say if you installed just black, and you ran pip freeze, you'd see a whole bunch of stuff.

02:47 But if you run, if you now install pip chill, pip dash chill, and run pip chill, you'll get pip chill also, it'll tell you that it's there.

02:56 But it also just shows you black and what version of black you have.

02:59 So if you've, you know, hopefully, black itself is specifying enough dependencies that make sense.

03:07 There's definitely times where you want to have everything, all the versions nailed down, like you said, for security updates and stuff like that.

03:14 But there's a whole bunch of times where, like for instance, I've got internal projects where we actually have, we actually vet all of the versions and put them in a different repository.

03:25 But different combinations, we won't, you don't need to be that specific.

03:29 So, Pipchill's a way to just list the ones that you've installed.

03:33 And I think it's really cool.

03:35 I think it's really cool too.

03:36 One of the things that's neat is it toggles between this, here's what you installed and here's everything, which is what you're talking about with Pipfree.

03:43 but there's another mode where you do -v and it'll show you the stuff you installed and then it'll show you commented out but present.

03:51 These are all the things, the libraries and their versions that were installed but are not top level so they're commented out.

03:59 And then there's a little comment like installed as a dependency of Jinja2Time or installed as a dependency of cookiecutter.

04:06 So you can do that to get a look and say, hey, what does my virtual directory look like?

04:09 Why is this thing here?

04:10 Oh, I see it came from this other place.

04:12 Yeah, and then also if you can have that with or without versions, and so you can, if you know there's a dependency vulnerability for a particular thing, you can say, "Well, which version am I getting?" So, that's good.

04:25 Yeah, this is really nice. I'm liking it.

04:27 You've got like a version checker thing that tells you if there's vulnerabilities, right?

04:31 Yes.

04:32 What are you using?

04:32 Well, for vulnerabilities, I think just having a pinned version in a requirements.txt file is sufficient for GitHub to say there's a problem.

04:40 So like any requirement file is pinned.

04:42 But if you sign up with Dependabot, which is, there's some things that are super, super annoying about Dependabot.

04:50 But what is nice is that it will show you anytime there's a thing.

04:55 So you say like, weekly notify me of updates to my requirements file.

04:59 And so every Monday morning I get a list of like, here are the updates that I could upgrade for like my web framework or database access or whatever.

05:07 And like put in the automatic PR for it.

05:10 it'll show you like the change log, and then you can accept that and it'll update your requirements.

05:16 Yeah, okay. And then there's also a workflow that some people use that have a like a smaller, like a requirements in or something. It's just a list of packages they're using.

05:27 And then they'll just get the latest of whatever those few things, and then test it, and then freeze it. So you've got like a two stage thing. So you, that what you deploy is a frozen set of package lists, and all the versions, but you've got some other way to do just how to generate that, which ones you should install.

05:48 Right, yeah, that's an interesting way to do it, because then you basically have just PyPI and pip just giving you the latest.

05:54 Yeah, just to round out, the thing that is super duper annoying about dependabot is like, on docpython training, that site has 30, 40 packages it's using, if you count up the dependencies, pip freeze, not pip jail freeze.

06:07 And every change is its own PR.

06:12 And I swear, almost weekly I am merging, I'm manually merging merge conflicts between Dependabot and Dependabot.

06:21 It's like, well, this requirement line and that requirement line changed and like, they won't give it to you as one just, here's the changes for the week. It's like, no, no, no, here's a bunch of changes and you'll probably be in here merging this manually. So enjoy that.

06:33 Anyway, it's still really cool to have it automatically. I do like this idea of it just kind of like some part of the CI going, this is what I depend upon.

06:42 Install what I need, generate the pinned versions, because then when you go to production, you say install pip -r, it will actually upgrade the stuff that needs upgrading.

06:52 Rather than fulfilled.

06:53 One of the requests I have for the people working on pip chill is I think an option to not list itself would be good because I'm just installing it so I can run it.

07:03 That actually makes a lot of sense to just omit self.

07:08 You can like type it through a dash B or something.

07:12 Maybe it's like some kind of worm and its goal is to just get into all projects and by listing itself it's just going to slowly make its way out.

07:19 Maybe.

07:20 Speaking of problems you might want to avoid, not that that is one, but one that you might is if you work on Windows which from the Stack Overflow survey and the PSF survey, we found a very significant number of people in the Python space do that.

07:34 And I've heard people in Python talk about this thing called NumPy.

07:38 You heard of NumPy?

07:39 No, NumPy is something that definitely is the foundation of the many, many, many data science libraries, right?

07:48 Well, big news sent in by Daniel Mulkey, recent Windows update broke open BLAS which is a dependency of NumPy, speaking of dependencies.

08:00 So effectively, if that doesn't work, NumPy doesn't work.

08:03 That sounds less good.

08:04 Yeah.

08:05 Yeah, so there's a whole long developer community thread, and I mean long, people talking about it, suggesting fixes that may or may not be fixes, etc, etc.

08:14 It starts like this, I'll just read the quick overview so people know what to be on the lookout for.

08:18 I'm a NumPy developer.

08:20 We've been trying to track down some strange issues where after updating to Windows 10 2004, suddenly code that worked no longer works.

08:30 Here's the NumPy issue and the corresponding issue in OpenBlaz, BLAS.

08:34 The problem can be summarized as when calling fmod, something is changed so that much later calling OpenBlaz assembly routine fails.

08:43 And we're way down here, Brian.

08:46 The only difference I can see is that in the register that Visual Studio exposes after the call to fmod st0 is nan.

08:54 [laughter]

08:56 - The bug that people. - Yeah, geez.

08:58 - But the fact that it doesn't work is not ideal. - Good luck.

09:02 So Steve Dower and some of the other Microsoft people commented there. There's a fix slated to take until January 2021 to be released.

09:10 But Matt P posted a workaround. Says for all of those at home following along and looking for a quick fix, NumPy has released a bug fix 1.19.3 to work around this issue.

09:20 The bug fix broke something else on Linux, so we had to revert the fix in release 1.19.4.

09:29 So the fix on Windows, the workaround on Windows broke the Linux version.

09:34 But as a Windows person, you may not care.

09:37 So on Windows, you could pin it numpy == 1.19.3 for now, and just don't put that into production on Linux.

09:46 Sounds easy enough, I guess.

09:47 Yeah, I mean, if you're a package maintainer, this seems ugly, but if you're like an end user, I'm either installing it on Windows or I'm installing it on Linux.

09:56 It's not a problem.

09:57 Yeah.

09:57 I don't know if pip actually has a platform flag, like pip in the dashr, you know, the requirements.

10:03 Can you specify this platform gets this requirement, that platform gets, I'm guessing no.

10:08 Well, no, I mean, it's part of the wheel.

10:10 So the wheels can say this wheel is appropriate for only certain platforms.

10:14 Yeah, but if you're building an application, not something that's on pip, yeah, I don't know. I don't know how to do it.

10:19 But you can, this is like a fix, but just be aware that that will make it not work on Linux.

10:24 So, yeah, anyway, I just want to put this on people's radar so they're not down looking at registers going, why is ST0? Man, that's odd.

10:31 I'm glad I don't have to do things like that.

10:33 We can all be thankful we don't have to do things like that.

10:35 I mean, that's why we work in Python, right?

10:37 Or let's reverse it.

10:39 I'm really grateful that other people are looking at that, so I don't have to.

10:42 Yes.

10:43 Thank you, people.

10:44 Speaking of thank you, Brian and I are both doing a bunch of stuff online, and people often ask how they can support us, support the podcast, and just get better at Python.

10:53 And we're trying to help people do that, right, Brian?

10:55 We are, yeah, in lots of ways.

10:57 One of the things we're doing is this podcast.

10:59 And if people want to just support us directly, there's a Patreon link in all of the show notes.

11:05 you can donate. We have like 60, I just checked, we have 65 people doing this now. That's awesome. Thank you everyone. And you're teaching some classes. I am. The most recent one that I worked on should maybe, maybe be out.

11:17 It's completely done. I just put my head down and did the whole thing. It was like a 4 and a half hour fast API course for building APIs with fast API.

11:25 So I'm really excited about that one. And hopefully it may even be out. But people can just check out training.talkwithon.fm. And It'll be over there soon if it's not by the time you hear this. Yeah, nice. Indeed. I'll just keep plugging away at it, man.

11:38 This is gonna be the 30th course that we've created over there and we're not done. We're gonna keep plugging away. Keep plugging.

11:46 Maybe you need a plugin architecture.

11:48 Maybe I do. Tell me about it. Well, so one of the things I love about pytest is the plugin system. So you can, I mean, Plugins can provide extra fixtures, extra flags, they can modify the output, they can do all sorts of fun things.

12:04 Anyway, the plugin architecture that pytest uses is not built into pytest, it's something called Pluggy.

12:11 And there weren't, I mean there are a couple little how-to guides, but they were kind of sparse and I was having trouble.

12:19 I wanted to do a plugin in a little application before and struggled.

12:24 But now here's a here's apparently two python talks one of them held at pygotham and one at pycon india And an article around it. So the article is build plugins with pluggy It's kind of a nice article. It starts with a small command line application That you it like looks for books or something and it has one output format And the argument is like wouldn't it be cool if you could have more different kinds of output?

12:51 And one of the ways to do that in an application is to allow plugins so that anybody can extend the application for a different format.

13:00 Yeah, one thing that's really nice about that is you don't have to understand the whole program and all the code to contribute to it.

13:05 You just have to understand that little tiny plugin interface.

13:07 And if you can handle that, then you basically can extend the app.

13:11 Yeah, and one of the beauties of those sorts of things, so I've written plugins for pytest and I don't understand the internal architecture of pytest.

13:16 I don't really understand how to do the plugin system that well.

13:20 I mean pretty good but you can take something that's already done and copy it so you can say oh here's another one that also changes the output I want to copy that and change it myself.

13:32 This is kind of how that works it took part of the system of the application and he walks through how you would change the architecture to instead of doing the formatting the internal you could do it as a plugin and then it talks about the different architecture of pluggy because you've got a host and a plugin and a hooks and hook specs and all sorts of stuff like that and it's it's actually easy to get lost through this if you're just reading it but i suggest walking through the code as he's doing it and actually running the stuff and looking at it and there's not really any super easy ways to do plugin systems in python I don't know if any language has a better system.

14:09 But plugging is pretty good.

14:11 You know, if you follow along, you can kind of get with it.

14:13 So yeah, very cool.

14:14 I haven't looked to see if the talks are online yet, but I'm looking forward to watching this if they do go up.

14:21 I suspect they probably will in the modern age of everything being online.

14:26 Yes.

14:26 Yeah, probably.

14:27 Awesome.

14:28 So let me talk about a little query syntax that I've been wanting in the Python space for a long time and you almost have it. It's so close in some ways but so far in others.

14:43 For example, with list comprehensions, generator expressions, all those types of things, we can do a lot of in-memory data-like things. We could go and say, if I got a list of numbers, I could get the square of the number for all the numbers if the number is every number that's odd or some weird thing like that, right?

15:04 That's sort of a query type of thing.

15:06 There's like a where clause, there's a from clause, there's a select transformation bit.

15:11 You could even do like paging with slices on the end of it.

15:16 So like skip three pages of five, so slice 10 comma 15 or something like that.

15:22 Except there's a few things that are just not there.

15:26 The one that drives me the craziest the most is like a sorting by the way.

15:29 Like if you could just do like an order by in a list comprehension, Oh, that'd be nice.

15:35 But you can't, and you also can't put a dot sort on the end because that returns none.

15:38 So if there was some way to put like a little bit more together, that would be great.

15:44 And one of the, probably the best implementations of this, I would say across all the languages is this thing called link language integrated query in C#.

15:53 Yeah.

15:53 And I know it's not about C#, but studying that there's a really interesting way of basically taking lambda expressions, applying them to collections and doing those database like things, but much more where you can do like joins, and you can do other sorts of operations that are like paging or like filtering by type and all kinds of neat stuff there. So Adam sent over this project that he ran across called linkit, which adds link type of in-memory query syntax, like almost database syntax to Python lists.

16:29 So like for example, if you had a list of programmers, you could say programmers where E, you know, lambda of E goes to E.experience greater than 15, except for Elon Musk, where it's the type of, this type of person, you know, category of developer.

16:44 Take three to get only three of them.

16:46 Skip, you know, you could skip like two times three to skip two pages and three to get the third page of them.

16:52 You could select just out there variables and then apply more queries to that and do this really cool fluent interface on top of these collections, which I think is just super neat and I really like this interface.

17:06 So if people like this fluent style of programming and they kind of think in data database type of thinking, here's a really cool way to apply that to Python.

17:16 This is kind of cool.

17:17 Yeah, I like it a lot too.

17:19 I like it a whole lot.

17:20 So previously, and by previously, I mean really previously, I don't remember exactly.

17:26 Let me see.

17:27 Use our little search over at Python Bytes.

17:30 Back in episode 106.

17:32 So what is that like?

17:35 Three, four years ago or something like that.

17:38 We talked about this thing called ASQ from 60 North, which is a cool project by, well, the guys at 60 North who do a lot of Python.

17:47 And it basically is a similar type of thing.

17:50 as link queries to it.

17:51 But one I didn't like what didn't spark joy in me, I guess on that one is you had to like convert everything to this query object and then you could do queries on it that you could convert it back to a list, which is like so close, you know.

18:06 But what's neat about this other project, this link it project is it is the things that you do, the queries against are a superclass of list or derived from list.

18:18 So anytime a list is expected anywhere, you could just pass the result of this around.

18:23 You know, you could do conversions, like, "Oh, now it's a queryable thing.

18:25 Oh, now it's not anymore. Now it is again." Right? It's kind of always this thing that can stand in as a list but actually has this query capability, which sounds minor but seems like a big usability benefit, actually.

18:36 Yeah, definitely.

18:37 Because, yeah, you want to be able to write functions that can return this and send it to… Maybe you want one of these objects again, so you can do further queries.

18:45 Exactly.

18:45 Or you can pass it to something that expects a list.

18:47 - That's good. - Yeah, it's pretty good.

18:48 And if you want to upgrade a regular list to a list, you just, you know, pass it to the constructor of this like, drive list thing, and then now it's like this queryable list.

18:57 So it's not quite as nice as some of the like, true language built-in functionality, but still, this is quite neat, actually.

19:05 - Yeah, I think I'll play with it, because I think that there's some use cases that aren't obvious until you start playing with it.

19:10 - And it's really legible, right?

19:11 Like, I would like to, from this group, where these are true, select this thing, where that is true about the sub thing you got, right?

19:19 Like it's a pretty natural way of reading codes.

19:21 I kind of like it.

19:22 - Yeah, I'm just chuckling about your example though.

19:25 I'm sure you didn't make it up, but.

19:27 - No, this comes from the documentation.

19:29 - What is it?

19:29 So I've got programmers, I'm looking for somebody with greater than 15 years of experience.

19:34 I don't want Elon Musk, something AV type, I don't know what that is.

19:38 - Yeah, I don't know what that is either.

19:39 - Take three random people, I guess.

19:41 - That's the first three.

19:42 It's like limit three.

19:44 Yeah, the first three, if there could be thousands, just give me the first three.

19:46 first three, find out what they had for lunch, and if it was a hot lunch and it was not from Pizza Hut, get the last one and get the last slice of the pizza by the, yeah.

19:59 - Yeah, so what you end up with, I believe, is a list of pizza slices which correspond to the last slice of pizza each programmer ate.

20:06 - Oh, okay.

20:07 - I think.

20:08 I haven't read it yet.

20:09 I gotta write some code to make that happen, but yeah, I think that's what you end up with.

20:12 - Yeah, okay, cool.

20:13 - Anyway, yeah, pretty neat.

20:15 But this idea of having this sort of natural query language that mimics databases, but is in memory, could have some legs, I like it.

20:23 - Yeah.

20:24 - All right, what you got for the last one here?

20:25 The last one of yours?

20:26 - Well, this one is, I just thought we should announce this because it sounded pretty neat, although the details of it are a little over my head.

20:34 But so there's a Spotify, deals with music, right?

20:38 - Yes.

20:38 - Probably a lot of music.

20:39 So one of the things they talked about, and I'm going to cut to the chase, It's an application or a framework called Clio.

20:46 I think I'm pronouncing that right, K-L-I-O, for processing audio files, or they say any large binary--

20:52 or any binary files, especially large ones at scale, things like maybe pictures or any other binary data.

21:02 Anyway, so it's an application.

21:04 It's used for pipelines.

21:05 It's intended for large scale input and output of all these files, scalability, reproducibility, working with pipelines and streaming and batching, and to try to get it to be easy to use and easy to read so that you can have a close collaboration between researchers and engineers.

21:22 It's Python-based.

21:23 It looks pretty cool, and for a lot of people doing research and data pipelines for these either audio files or vision or pictures or something like that, this might be cool.

21:34 Yeah, it could be all sorts of stuff, right?

21:36 I can imagine anytime there's a bunch of computation and a bunch of steps, people collecting the data, someone's going to analyze the output on the other end.

21:44 It might be a pretty neat use case.

21:45 Apparently it's built on top of Apache Beam.

21:48 And so it's also cloud agnostic. It does intend to work with cloud services, but you can use lots of different ones.

21:56 I'm linking to a couple of announcements and an article about it.

22:01 It looks like a large effort and probably a large effort for Spotify to make it open source.

22:06 I think that's pretty cool that they're trying to have this be around.

22:09 One of the articles says this might be useful for people doing, like even comparing, you know, dolphin songs or something.

22:16 There's a lot more use cases other than just music to deal with audio files and this is kind of neat.

22:21 Yeah, quite cool.

22:22 Is this a project that Lynn Root was working on?

22:24 I saw her posting about, I think it was her, she was posting about something.

22:28 I don't know.

22:28 Anyway, it looks like a really cool project from Spotify.

22:31 Does she work on Spotify?

22:32 She used to, I think she still does.

22:34 I just tried to pull up her GitHub repo, but I couldn't find it, or her Twitter account, but I couldn't find it for some reason.

22:39 Anyway, yeah, this is neat. I'm a little bit surprised they open sourced this, but at the same time, it seems useful.

22:45 And why are you surprised? Does it seem fairly proprietary?

22:48 No, no, it seems, I guess, like a little mix of a somewhat specialized for their world a little bit, and then, you know, not at all related to like what Spotify does.

22:59 You know, like it's not, I don't know, it doesn't seem like it feeds back anything to Spotify necessarily. But it definitely looks useful. So quite cool.

23:07 - Okay.

23:07 - Yeah. Yeah. Nice. And nice to see Spotify doing that.

23:10 Also nice is getting feedback from listeners, right?

23:14 - Yes.

23:14 - Say like a good quarter of our entire history of our show has been like, "And did you know about this? I'm sure you do. You just didn't cover it." No, we didn't know about that, but thank you. Now we do. And so Marco Gorelli sent in something and says, "Hey, recently you mentioned that it would be really cool if you could have you have a Jupyter notebook that just is more of a report thing. You could reveal the code, but by default the code cells are collapsed and hidden. So you can just go through it and if you say, "Oh, I actually want to see the code for this particular part, show me." Yeah. So he sent in an article, I guess, walking through how you would do that with a notebook.

23:49 So he's like, "Hey, I actually wrote something about that, so here you go, in case people care about that." So the idea is basically set up a Jupyter notebook.

23:57 I'm reading this right. Set up a Jupyter notebook.

23:59 you can tell it to build an HTML file that is like a static HTML file with all the data that's in there, or to save like you would see on GitHub or something where it's not actually live and computed, but you see the output and you see the cells, right?

24:13 And then go tweak that HTML file.

24:16 Think you tweak the HTML file.

24:17 To just add a little bit of code that will use some JavaScript to collapse those.

24:21 So then you can just share that HTML file and people can toggle stuff open and closed and they get more of a article style output.

24:29 - Oh, nice. - Yeah.

24:30 So nothing like super deep or whatever, but it sounds like you're in that space.

24:34 You're like, I really wish I could share this notebook, but that 30 lines of Python, it needs to be there, but it's not exactly what I want people to see.

24:42 I just want them to see the steps.

24:44 I think this is a pretty neat.

24:46 - Oh, that's cool.

24:46 Yeah. - Yeah.

24:47 - Definitely useful. - Short and sweet, indeed.

24:49 - I love it when that happens, when people, we come up with, we're like, I wish this could do this.

24:53 - I wish this existed. - Oh, yeah.

24:55 - Did you know it does? - It does.

24:56 - Yeah.

24:57 - Exactly, exactly.

24:58 - Well, that's our six items.

25:00 Do you have anything extra to talk about?

25:02 - I do have a couple of things that are all small little things.

25:06 One, there was this tweet I was mentioned in.

25:08 Let me just read the tweet to you and you just tell me how you feel about this, okay?

25:12 - Okay.

25:13 - Okay, so Michelle A. Renard tweeted, "The difference between Western and Chinese societies "can be compared to M. Kennedy's difference "between software 1.0 and software 2.0." and it links to the Sanders Media Showdown article.

25:28 What?

25:29 So I saw this, I was like, okay, this is weird.

25:31 We get copied on all sorts of things.

25:32 Like, hey, we're going to copy 20 people that talk about stuff on Twitter because we published this article and we want you to cover it.

25:38 And I'm always like, yeah, not so much.

25:40 But if you hover over this, it says, this is actually an AI bot pundit trained to sound informed and profound.

25:48 The content mine, the links is popular and no tweet is the opinion of the author of the bot.

25:53 I just thought it was really weird that there's like this AI bot going around on the internet, you know, using like machine learning and stuff to just randomly be a pundit.

26:03 Weird, right?

26:04 Yeah.

26:05 Anyway, Michelle A. Renard is out there.

26:06 People do all sorts of weird stuff on Twitter.

26:08 Yeah, but randomly like mentioning just other random people on the internet.

26:12 Like, "Hey, that person over here, we're going to compare." Anyway, I just thought it was funny and amusing, so I put it up there.

26:17 Yeah.

26:18 It would have been even, I guess, more to the point if they would have said the difference between like Python 2 and Python 3.

26:25 I know.

26:26 Well, I'd still be one of the bot.

26:28 Even if it was software 2 and software 3, it would have been closer.

26:30 Yeah, #software even.

26:31 Yeah.

26:32 #software.

26:33 And also, Apple just had their big event a little bit ago.

26:35 Have you got your new Silicon Mac?

26:37 Have you ordered it?

26:38 Silicon Mac?

26:39 Apple Silicon?

26:40 No, I have not.

26:41 No.

26:42 Have you?

26:43 I ordered a new Mac.

26:44 I actually was thinking about getting one of those, which was really interesting because it's just, I think it's going to have a lot of knock-on implications.

26:49 Like for example, if you're shipping C code as part of say, like a wheel, will it also do you now have to deal with like different platforms on the Mac?

26:58 Will your package actually work on a Silicon Mac?

27:02 I don't know.

27:03 I don't know.

27:04 I don't either.

27:05 But it's going to be interesting.

27:07 I mean, the stuff needs recompiled.

27:08 So I'm mostly wondering what this, these Apple Silicon Macs will mean for Python and its packaging ecosystem.

27:17 Are we going to run into a place where like, well, you can't use NumPy on the new Macs for like three months?

27:22 I have an idea.

27:23 Okay.

27:24 I think if we get a whole bunch of Patreon followers, they can help us buy each of us one of these things.

27:30 And then we can test stuff for people.

27:32 Yeah, there you go.

27:33 Perfect.

27:34 I actually I did buy a new ish 16 inch MacBook Pro that's still Intel because I was hoping to get one of these, these new shiny ones.

27:41 But well, if you're not going to make a new one, my current Mac is sort of dying.

27:44 I'm gonna have to buy something.

27:46 So, actually, the whole talk about that actually encouraged me to buy not the AppleCell kind of one, but I'm pretty excited to see where that goes.

27:52 They've got some huge ML performance speedups and a lot of interesting things.

27:57 Like the new MacBook Pro, I think, has 17 hours of battery life, 20 for video playback or something insane like that.

28:04 That's incredible. I've got like six.

28:06 I know. The MacBook Air doesn't even have a fan.

28:08 Like it literally, it can't make a sound because it has no mechanical pieces, besides typing, I guess.

28:13 Anyway, just wanted to shout that out, put that out there and see what people thought about the new Apple Silicon being like a different app compilation type and what that's going to mean for Python and think about it. I mean, I guess it really comes down to what happens to CPython, right? Because it'll run under emulation mode if it's not, but if they upgrade CPython to run natively on Apple Silicon, then what does that mean for packaging? Could be like a whole deal.

28:37 I don't know.

28:38 Yeah, a big thing.

28:39 Yeah, hopefully not. You shouldn't joke about it, though. It's not funny.

28:43 Everything's funny.

28:45 Alright, then tell us a joke.

28:47 This was sent to us, not sent to us, it was just sent out by data, D-E-T-A-H-Q.

28:51 It's a new database.

28:53 They're doing some interesting things.

28:55 They just posted out 10 E engineers are the future.

29:01 Engineers with 10 E's.

29:03 Beautiful. I've got one for you as well.

29:05 This one was, comes to us by Richard Kearns. I don't know, this one's a little a little bit political, but we could probably pull it off, don't you think? A little sensitive.

29:15 Anyway, why did the data scientist get in trouble with animal welfare?

29:18 >> Because she was caught trying to import pandas.

29:21 >> Oh, dear.

29:24 >> Pretty good, right? Yeah, thanks for Richard for writing that one for us. That was a good one.

29:28 >> Caught trying to import pandas. You know it's SPD, come on.

29:33 >> That's funny.

29:35 >> Indeed.

29:36 >> Well, thanks again, Michael.

29:38 >> Yeah. Fun as always. Same time next week?

29:40 >> Yeah.

29:40 - Yeah. - I'll do it again.

29:41 - Bye. - See y'all.

29:42 - Thank you for listening to Python Bytes.

29:44 Follow the show on Twitter @PythonBytes.

29:46 That's Python Bytes as in B-Y-T-E-S.

29:49 And get the full show notes at pythonbytes.fm.

29:52 If you have a news item you want featured, just visit pythonbytes.fm and send it our way.

29:57 We're always on the lookout for sharing something cool.

29:59 This is Brian Okken, and on behalf of myself and Michael Kennedy, thank you for listening and sharing this podcast with your friends and colleagues.

Back to show page