BINREV SPYD3R

Members
  • Content count

    3,299
  • Joined

  • Last visited

    Never
  • Days Won

    18

BINREV SPYD3R last won the day on May 25

BINREV SPYD3R had the most liked content!

Community Reputation

-38 Troll

About BINREV SPYD3R

  • Rank
    I could have written a book with all of these posts

Profile Information

  • Gender
  • Country
  1. This conversation took almost an hour, so I split it into two shows: Part 1 talks mostly about the RFC itself, what it means and why. Part 2 goes into personal experiences with the RFC and with syndication in general, in particular in the context of web comics. This is part 1. The why When serving most RSS/Atom feed readers today, you have to choose: Do you make a complete feed with all the things you ever published, or do you make a shorter feed with just the latest entries? This is a trade-off with pros and cons, and it seems like a trade-off you have to make, but a solution to let your Atom feed have the cake and eat it too existed already 13 years ago, if only any of our feed readers would adhere to it: RFC 5005, Feed Paging and Archiving The what https://tools.ietf.org/html/rfc5005 was published in September 2007 The XML namespace for RFC 5005 elements is http://purl.org/syndication/history/1.0, aliased as fh below. Section 2 defines the complete feed: It is one document (Atom file) that contains the entire set the feed describes. The document is marked with an fh:complete element. Section 3 defines the paged feed: It is a series of documents connected with Atom link elements with rel set to the link relations first, last, previous or next. Section 4 defines the archived feed: It has a subscription document that may change at any time, and a series of archive documents that are expected to have stable contents and URIs. The link relations defined are current, prev-archive and next-archive. The semantics are clearer: prev-archive refers to previously published entries, and because the contents are stable you can stop when you see a URI to a document you already have. Archive documents are marked with the fh:archive element. The who In this show I’m talking to: fluffy Federated social web: https://queer.party/@fluffy Writes and makes things in several creative fields: https://beesbuzz.biz/ Publ is like a static site generator, but dynamic. It produces RFC 5005 archive feeds, of course: http://publ.beesbuzz.biz/ Thoughts on ephemeral content vs content worth archiving and how they relate to protocols: https://beesbuzz.biz/blog/5709-Keeping-it-personal Jamey Federated social web: https://toot.cat/@jamey Blog: http://minilop.net/ Made a prototype full-history reader that follows RFC 5005 links: http://reader.minilop.net/ Made a webcomic reader mostly mentioned in Part 2: https://www.comic-rocket.com/ Made a WordPress plugin implementing RFC 5005: https://github.com/jameysharp/wp-fullhistory Made an RFC 5005 archive feed synthesizer for sites with a predictable post frequency and URL structure: https://github.com/jameysharp/predictable/ Hosted at https://fh.minilop.net/ Was on HPR 9 years ago, talking about Xorg! http://hackerpublicradio.org/eps.php?id=0825 Conversation notes Google Reader was terminated 2013-07-01, all subscription data permanently gone on 2013-07-15: https://www.google.com/reader/about/ Mastodon had Atom feeds with paging, but the feeds went away when OStatus went away: https://github.com/tootsuite/mastodon/pull/11247 HTML4 does indeed define the HTML link relations: https://www.w3.org/TR/html4/types.html#h-6.12 It has prev rather than the previous of RFC 5005, but mentions that some browsers support previous as an alias. HTML5 also defines the HTML link relations: https://html.spec.whatwg.org/multipage/links.html Here previous is a lower-case must for historical reasons. IANA manages the Registry of Link Relations: https://www.iana.org/assignments/link-relations/link-relations.xhtml It references RFC 5005 for the Section 4 relations, but not the Section 3 ones. RFC 5005 singles out its own Section 3 (Paged Feeds) as the best-effort, loose, discouraged model. Section 3: Therefore, clients SHOULD NOT present paged feeds as coherent or complete, or make assumptions to that effect. Section 4: Unlike paged feeds, archived feeds enable clients to do this without losing entries. I’m confused about it in the show, but the RFC is clear that an archived feed has one dynamic subscription document, which points to a chain of immutable archive documents. Back in 2002, Aaron Swartz published his joke MIME-header-based RSS 3: http://www.aaronsw.com/weblog/000574 The cultural context at the time and the rivalry between RSS 0.91+, RSS 1.0, RSS 2.0 and Atom deserves a show of its own. View the full article
  2. In episode 3057 I talked about formal verification of software and forgot to mention why one would want to do it. This episode hopefully answers to that. While formal verification is powerful tool, it’s also rather cumbersome and slow to use. In some cases you’re better off with traditional ways of testing. View the full article
  3. Here are some steps you need to should take when setting up Ansible for the first time. Install the software Confirm ssh working Create a Inventory/Host_file Ansible Ping Create a playbook Confirm the YAML is valid Confirm the syntax is valid Confirm everything works together Install the software First you need to install the Ansible software. On Fedora that is as simple as a dnf install ansible, or on debian apt install ansible. Confirm ssh working Confirm that you can connect to the servers via ssh as you would normally. ssh -i /home/my_user/.ssh/id_ed25519_pi my_user@192.168.0.1 ssh -i /home/my_user/.ssh/id_ed25519_pi your_username@192.168.1.2 Create a Inventory/Host file Translate the ssh commands into a Inventory/Host file. I am using a YAML in this example but other variants are available. all: hosts: my_server: ansible_host: 192.168.0.1 your_server: ansible_host: 192.168.1.2 ansible_ssh_user: your_username vars: ansible_connection: ssh ansible_ssh_user: my_user ansible_ssh_private_key_file: /home/my_user/.ssh/id_ed25519_pi Ansible Ping Check that your server is up and reported correctly in your file by having Ansible ping it. This should allow you to determine if at least there is a command and control connection available. ansible --inventory-file my_inventory.yaml -m ping all This uses the group all and will ping all servers under it. The reply below shows a positive and negative response. my_server | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } your_server | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.1.2 port 22: No route to host", "unreachable": true } The msg will give you a clue as to what is going wrong and you should try to ssh directly with the Ansible credentials again, and then try and ping using Ansible. ansible --inventory-file my_inventory.yaml -m ping your_server Modify the Inventory file until you have managed to get a successful reply. Create a playbook Work on your playbook and verify that it is valid yaml. --- - name: Test Ping hosts: all tasks: - action: ping Confirm the YAML is valid If there is no reply all is good. yamllint ~/my_example.yaml If there is no reply all is good. For your reference I will remove the --- line and this is the response. yamllint ~/my_example.yaml /home/user/my_example.yaml 1:1 warning missing document start "---" (document-start) Confirm the syntax is valid Then verify that the playbook is sane ansible-playbook --syntax-check ~/my_example.yaml If there is no reply all is good. For your reference I will remove the hosts line and this is the response. ansible-playbook --syntax-check ~/my_example.yaml ERROR! the field 'hosts' is required but was not set Confirm everything works together After that you should be able to run the playbook using. ansible-playbook --inventory-file my_inventory.yaml ~/my_example.yaml PLAY [Test Ping] *************************************************************************************************** TASK [Gathering Facts] ********************************************************************************************* [WARNING]: Platform linux on host my_server is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. ok: [my_server] fatal: [your_server]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.1.2 port 22: No route to host", "unreachable": true} TASK [ping] ******************************************************************************************************** ok: [my_server] PLAY RECAP ********************************************************************************************************* my_server : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 your_server : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0 View the full article
  4. NEW 'Off The Hook' ONLINE Posted 21 May, 2020 0:23:09 UTC The new edition of Off The Hook from 05/20/2020 has been archived and is now available online. Audio problems plague the show, the HOPE conference will still be held in an expanded 9-day online event. "Off The Hook" - 05/20/2020 Download the torrent here View the full article
  5. This is Linux Inlaws, a series on free and open source software, black humour, the revolution and freedom in general (this includes ideas and software) and generally having fun. Linux Inlaws - a podcast about on topics around free and open source software, any associated contraband, communism / the revolution in general and whatever else fancies your tickle. Please note that this and other episodes may contain strong language, offensive humor and other certainly not politically correct language - you have been warned (our parents insisted on this disclaimer - happy mum?). Thus the content is not suitable for consumption in the workplace (especially when played back on a speaker in an open plan office or similar environments), any minors under the age of 35 or any pets including fluffy little killer bunnies, your trusty guide dog (unless on speed) and cute T-Rexes or other associated dinosaurs. Links: Audacity: https://www.audacityteam.org Audacity OSX work-around: https://forum.audacityteam.org/viewtopic.php?t=105586 KDEnlive: https://kdenlive.org Blender: https://www.blender.org PwC mishap: https://www.theregister.co.uk/2020/05/06/pwc_azure_squatting The Current War: https://en.wikipedia.org/wiki/The_Current_War Rick and Morty: https://www.adultswim.com/videos/rick-and-morty Better Things: https://en.wikipedia.org/wiki/Better_Things_(TV_series) Pamela Adlon: https://twitter.com/pamelaadlon View the full article
  6. NEW 'Off The Wall' ONLINE Posted 20 May, 2020 0:05:26 UTC The new edition of Off The Wall from 05/19/2020 has been archived and is now available online. "Off The Wall" - 05/19/2020 Download the torrent here View the full article
  7. This is an update to my earlier show to pull together what we know about the Coronavirus on this date, and what measures we can take. It focuses on the lack of solid information at this point and suggests a prudent course to stay safe. https://www.palain.com/health-topics/coronavirus-update-20200507/ https://www.palain.com/health-topics/scientific-and-medical-reports/ http://hackerpublicradio.org/eps.php?id=2685 https://www.cdc.gov/flu/about/burden/2017-2018.htm https://en.wikipedia.org/wiki/All_models_are_wrong http://www.healthdata.org/covid/updates https://www.medpagetoday.com/infectiousdisease/covid19/86127 https://www.cnn.com/2020/05/04/health/us-coronavirus-monday/index.html https://www.palain.com/health-topics/coronavirus-update-20200507/ Extracted from Palain.com under the tearms of Creative Commons Attribution-ShareAlike 4.0 International License. Coronavirus Update 20200507 The coronavirus pandemic is continuing throughout most of the world, and I wanted to put down some observations on where we stand today. First, note that I put the date in the title. This is because the situation in some ways changes day-by-day, even though there are continuities. That makes it a dangerous place to be because it is human nature to look for the latest news and jump on it if it looks good. And that is a prime mistake because we do not in fact know enough at this point to be confident in these news reports. I would refer you to my earlier essay, Scientific and Medical Reports, which is highly relevant right now. While I could not have predicted this pandemic when I wrote it, it contains basic principles that are always relevant. The nature of the press is that it is like the carnivorous plant in the movie Little Shop of Horrors, always crying "Feed Me!" And of course we are all interested if not to say anxious for any news on the course of this disease and where it is taking us. What this means is that you will see a unstoppable stream of news stories touting the latest study on one or another aspect of this. Add in the desire of politicians to spin things to their advantage, and you have a recipe for disaster. To keep sane, remember a few basic principles: One study proves nothing. There are lots of studies, and many of them are one-and-done without having any effect on medical practice. If there is an interesting result, it merely indicates an area for further study. Study results are only meaningful when they have withstood peer review and have been replicated by other scientists. This process does produce good results, but only with time. Only in movies do scientists go into the lab and come out 24 hours later with the answer. If you really want to know when all of this will end, there are only two answers. It can end very soon with an accompanying loss of life because the virus is still spreading. This is starting to show up in places that ignore the science. Going outside without a mask and carrying on as usual is not brave, it is stupid. The other answer is that a gradual relaxation of isolation can happen if it guided by sound science. Unfortunately, as just explained, that sound science is still being sought, and will take time. When you see the vast majority of doctors and scientists saying the same thing, that is your best assurance the information is accurate. Right now the number one priority is testing, testing, testing. So, with that background, do we know anything at this point? Yes, we do. But we also have a lot of unanswered questions. Second Wave? The first big question is whether there will be a second wave, and this is something that every qualified epidemiologist I have heard from says is guaranteed. And the reason is that a certain "fatigue" sets in with staying in isolation, and at least some people will convince themselves they don’t need to do it. They are wrong, and they will guarantee that second wave. In the 1918 Flu Pandemic, the second wave was far worse than the first wave. And don’t forget there was a third wave in that pandemic until it petered out in 1920. The best thing you can do is keep isolated if at all possible, and follow all of the guidelines: Wear a mask if you must go out, such as for groceries. Many stores are offering special hours for seniors. If you are one, take advantage. After a shopping trip, wash or disinfect items carefully. Remember that soap is all you need to defeat the virus, but use disinfectant wipes when soap is not practical. After returning, strip and place all of your clothes in the washer. The detergent should kill any virus that is there. Wash your hands with soap frequently. Try not to touch your face. Maintain at least two meters distance from anyone not in your household when you do go out. Try to stay fit. I go for walks in my neighborhood if there aren’t too many others out, and when there is someone else out, I give them a wide separation. I also do gardening in my own yard, and exercise in my home. That won’t prevent you from getting the disease, but it may prevent you from dying of it. Yeah, this is all of the stuff we have been hearing all along. But annoying as it is, it does work if you do it. Is the virus mutating? Yes. In other news, water is wet. Face it, mutation is what organisms do, and that has been true for billions of years. The question you really have is "Is it getting worse?" And right now the answer is "We don’t know." Sorry I can’t give you any more determinative answer, but we are only at the "one study" phase right now, and we are a ways off from the "peer-reviewed, replicated consensus" phase that will resolve this. There are indications that at least this virus does not mutate as much as influenza, but even that may require more study. Am I Immune? We would all love to know if we are immune. This requires two big things to give a good answer. First, does having the disease and then recovering give you immunity? And the sad truth is that we don’t know yet. The common cold is a coronavirus, and you never get immunity. Influenza is a virus, and getting it one year provides no immunity the next. And if getting it once does provide immunity, we still need testing to discover this. The number one priority right now in all locations should be testing, testing, testing. That is the prerequisite for doing any decent epidemiology. There was a report (note: one study) out of South Korea that indicated that some people could get the disease twice, but they re-analyzed the data and decided that it might have been false positives. That is the kind of thing that happens when scientists are trying to do a year’s worth of work in few weeks, which is what they are doing. Is It More Infectious Than We Thought? Again, very unclear. And even less clear is what this implies. An argument is being made that if the rate of infection is higher, given the number of deaths, that would imply it is less lethal. And that is being used to argue in favor of this not being a big deal, so reopen everything. But to put it in perspective, in the 2017-2018 flu season, which was on the high end of deaths, we had 61 thousand deaths in the U.S. Today, in just over 2 months, we have 75 thousand deaths in the US, and that is with all of the extraordinary measures we put in place to keep people safe. To make an argument that Covid-19 is no more dangerous than the flu is to be criminally stupid at best. Didn’t They Predict More Deaths? Why yes, they did. A widely used model in the US is from the Institute for Health Metrics and Evaluation (IHME), at the University of Washington. And they have issued forecasts that ranged from hundreds of thousands of deaths to around 60,000 deaths. Clearly they have no idea what they are doing, right? Not so fast. As the statistician George Box famously said, "All models are wrong but some are useful". In this case you have to factor in two things. One is uncertainty, of course. To forecast how many people will die, it helps to know how many people have died, and this has been subject to fierce debate. And here it gets difficult, since one argument is over what counts as a Covid-19 death. And since every one of our 50 states has their own health reporting system, there is a wide disparity. One example of this is the idea of "excess deaths". If a given area has a pretty regular death rate for a number of years, and suddenly that death rate jumps 500% in the midst of a pandemic, it is reasonable to suspect those "excess deaths" are a result of the coronavirus. But if those deaths get counted, others will argue that it is inflating the numbers, and that only a positive coronavirus serum test should count. Since each state does this differently, this leads to the odd result that the disease appears more or less lethal depending on your state of residence. And that means politicians have incentive to get the numbers they want. The other factor complicating things is the phenomenon known as the "self-preventing" prophecy. You see, the initial high estimates tended to be "This is what will happen if you don’t take strong measures", and of course they were very high. And we know that governments like the UK and the US looked at those predictions, and started to take some stronger measures. So after a little bit, new predictions came out that were lower as a result of those measures. And now we are seeing misguided efforts to get people to go out and resume normal life, and as a result the newest forecasts are going up again. This is a feedback loop, in other words. View the full article
  8. While we all want things to go back to normal, the science just doesn't make that possible. July and August may still seem far away, but there simply is no way the COVID-19 crisis will be over by then, even in the best-case scenario. We had planned on waiting until June to make a final decision, but it's become clear that planning an in-person conference simply wouldn't be the responsible thing to do. Nothing matters more than the health and safety of our attendees. Yes, this will be a financial kick in the teeth for us. But it's one we'll willingly take as the mere possibility of putting any of you at risk is unconscionable. We want to be clear on one important point. Apart from the obvious disappointment of not being able to host this historic event at a new venue we were so looking forward to, we want everyone to come out of this not feeling dissatisfaction beyond that. More on that later. This is what we're now looking at: We are NOT canceling HOPE. Instead, we are changing what this year's HOPE will be. HOPE 2020 will now be a NINE DAY EVENT, beginning on Saturday, July 25th and running until Sunday, August 2nd, 2020. Why did we add an entire week? Because we want some good to come out of this and we believe our community is in a position to do just that. We all know what we WON'T have without a physical conference, but let's now focus on what we CAN have with some imagination and collaboration. That's what the hacker community is all about. We intend to have around the same number of talks as we normally do, but spread out over a much longer period and available for viewing on a high capacity stream. Those of you who bought tickets will have exclusive access to the presenters so you can ask questions, participate in workshops, and interact with other conference attendees. In addition, you will also receive a conference t-shirt and badge that won't ever be made available to anyone else. We plan on having NINE keynote speakers, again with exclusive Q&A access for our attendees. Participation in HOPE will no longer be bound by visas and worries of arrest by certain controversial types. So expect a dynamic and varied cast of characters. It wouldn't be HOPE without that, but now we can REALLY remove some barriers. In addition to ongoing talks and panels, we'll also have workshops for the duration of the nine day event. Expect everything from lockpicking to soldering instruction to our infamous ham radio exams. For the overnight hours, we're planning on having concerts, DJs, and other fun stuff. HOPE will remain a 24 hour event, but for nine days! All of this has been - and will continue to be - a daunting task. The COVID-19 pandemic has affected all of us in varying ways. The continued survival of 2600 was quickly put into doubt as our distributors stopped paying us, bookstores with our issues in them shut down, and new issues were left in loading zones. We've lost more than half a year's income at last count and have had to stop getting paid in order to continue to survive. Making this year's HOPE a success is really the only way we can come through this. As mentioned above, we don't want anyone to feel extra unhappy because of this. If you want a refund, we will give you one. But with all of the losses we've already suffered, we won't be able to continue existing if we have to issue very many of those. That's why we're hoping we can put together the best event possible and make this the highlight of our summer despite all that's happened. We are in the process of accepting talk and workshop proposals that have already been submitted. We will be providing technical support so that presenters will be able to participate smoothly in a virtual environment. We are now opening up the submission process to include many more participants from all around the globe, something we never really had the ability to do before. We hope to have talks, workshops, and musical presentations from a truly international community, no longer bound by a physical presence. While we have a dedicated team of volunteers already working on making this happen, we can definitely use many more, especially as the event draws closer and becomes bigger. Email volunteers@hope.net and let us know how you think you can help. We're looking for people with experience setting up and producing live online broadcasts. We are also looking for emcees, moderators for online forums, and people to fulfill other behind-the-scenes roles. If we get through all of this, we fully intend to hold a physical HOPE in 2021 (the first odd-year HOPE since 1997). This will also enable us to continue publishing once bookstores start opening again. All of this depends on our hacker spirit getting us through the toughest times we ever could have imagined. And if you share our enthusiasm over what this new incarnation of HOPE will mean, this summer will indeed be one to look forward to. View the full article
  9. For the sake of archival, "state of the world" refers to the COVID-19 pandemic. The code and CAD files for this project can be found here. Relevant links: PulseAudio is the sound server used by many Linux distributions pulsectl is a Python library that allows you to control a PulseAudio server NeoPixels are cool addressable LEDs The Teensy is a small but powerful microcontroller development board pySerial is a library allowing you to use serial ports in Python PlatformIO is a tool for making software development for embedded platforms easy Early prototype: Assembled electronics fitted into case ready to be closed: View of the top of the case, showing Cherry switch and NeoPixel LED indicator: View of the bottom of the case, showing USB port and some of the nicer M3 screws from my parts bin: Plugged in and powered on, showing the muted state: Button pushed, showing the unmuted/mic live state: View the full article
  10. Introduction Two HPR hosts from Scotland get together over Mumble to chat about all manner of stuff. Andrew Conway Dave Morriss Apology Dave’s sound was a bit muffled in this recording. It turns out that it’s important which USB port the microphone (Zoom recorder) is plugged into. Who knew! Notes Some of the topics we discussed Accent differences in Scotland What is Butcher Meat? Is it an Edinburgh expression? The Fish Van from Pittenweem The mysterious non-Crab Crab meat Dressed and live crabs in Cromer Handling enforced isolation; the response to COVID-19 The type of disposable masks sold for DIY use can be impractical Supermarket online shopping and delivery versus local shopping The etiquette of distancing when out walking or cycling for exercise during the lockdown Cycling anecdotes Slime tube sealant Old railway lines turned to cycle paths (e.g. Balerno line in Edinburgh, Marriott’s Way in Norfolk) Industrial archaeology and historical buildings Water of Leith, Edinburgh Paper making (Esparto grass) River Kelvin, Glasgow Lord Kelvin Warrender Baths, Edinburgh Govanhill Baths, Glasgow (ref. steamie) Electronics ESP8266, ESP32 Sonoff home automation D&D sessions Initiated by Klaatu in New Zealand Shortages during the pandemic: toilet rolls, flour, etc Supply chains: wholesale versus domestic Dracula by Bram Stoker Whitby, Yorkshire Brașov, Transylvania, Romania. Called Corona at one point in its history. Near to Bran Castle, known outside Romania as Dracula’s Castle. Links Pittenweem, a fishing village in Fife Cromer, a town on the Norfolk coast, famous for its crabs Whitby, a seaside town in North Yorkshire View the full article
  11. Many social media apps seem determined to put bells and whistles in every possible place, which is not always in the interest of the user. This talk presents an alternative view which is called “minimally social” which only puts in the features needed by the user. In this case, the main focus is on a simple blogging app. There is also a brief mention of a very technical talk about coding. https://www.zwilnik.com/?page_id=1103 Links: https://redaktor.me/apconf/ https://archive.org/details/apconf-talks/Talk8_Matt_compressed.mov https://read.as/ http://libresaas.org/ https://www.zwilnik.com/?page_id=1105 https://archive.org/details/apconf-talks/Talk9_Michael_compressed.mov https://en.wikipedia.org/wiki/Fediverse https://www.zwilnik.com/?page_id=1103 View the full article
  12. It's high time I submitted a sample episode from Escape Pod, one of the many excellent Podcasts from the Escape Artists. They are a serious platform for the best science fiction out there today. With so much choice, I can pick a recommendation that I think will be right up HPR's alley, and that is Escape Pod 624: Fandom for Robots released on April 19, 2018 written by Vina Jie-Min Prasad and Narrated by Trendane Sparks. The sound files are published by under a Creative Commons Attribution-NonCommercial-NoDerivatives license http://creativecommons.org/licenses/by-nc-nd/3.0/. View the full article
  13. Today's show is about my recently started hobby of restoring Matchbox models. I talked about this on the New Year show and Ken said it deserved a show in its own right. So today I briefly talk about how I got into the hobby through watching YouTube Videos of Marty's Matchbox Makeovers, and my first restoration pictured below. Enjoy. Links: https://www.youtube.com/channel/UCLM7pRUW6CmqqoAic24wbpQ View the full article
  14. NEW 'Off The Wall' ONLINE Posted 12 May, 2020 23:41:15 UTC The new edition of Off The Wall from 05/12/2020 has been archived and is now available online. "Off The Wall" - 05/12/2020 Download the torrent here View the full article
  15. TL;DL: What I end up recommending is that you use pip-tools for your dependency management needs, and pyenv-virtualenv for your environment management needs. In the show I explain why you would want these things. I talk about these tools: virtualenv poetry pipenv pip-tools virtualenvwrapper pyenv pyenv-virtualenv I mention in passing, and as fodder for further shows: reproducible builds Nix tox I also owe you a show on my awesome bash prompt that shows me which environment I am in. Install pyenv and pyenv-virtualenv git clone https://github.com/pyenv/pyenv ~/.pyenv git clone https://github.com/pyenv/pyenv-virtualenv ~/.pyenv/plugins/pyenv-virtualenv Add to ~/.bash_profile: export PYENV_ROOT=$HOME/.pyenv export PATH=$PYENV_ROOT/bin:$PATH Add to ~/.bash_profile (optional): eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)" The optional bits provide you with the pyenv shell functionality for setting a session-specific Python version, and automatic activation of the virtualenv. Most of the time you don’t need activation, scripts and commands run just fine via the shims, but some tooling around Python may sometimes need to know which virtualenv you’re in. Run the export and eval lines in your shell to have the configuration work immediately. Alternatively, do su - yourusername to login to a new session that runs the profile. The - is important. You might be able to get away with just opening a new tab or window in your terminal. Whether that runs the profile depends on your settings. Set up your pyenv virtualenv for your project # Creates the virtualenv named my-project-env using # the python named system (your system default python) pyenv virtualenv system my-project-env cd /path/to/my-project pyenv local my-project-env Your system Python may or may not work for this. You might have to install pip and virtualenv. It might still break with some message about ensurepip failing (currently both Nix (20.09pre) python and Ubuntu (18.04) python are failing for me, and older Anaconda pythons also had a broken venv). In that case, use pyenv to install a Python that works, and use that instead of the system python: pyenv install miniconda3-latest pyenv virtualenv miniconda3-latest my-project-env cd /path/to/my-project pyenv local my-project-env Install pip-tools You’ll want to do this inside the virtual environment that you want to manage. Don’t install pip-tools globally. cd /path/to/my/project # And, assuming you have the shims on your $PATH # and you set the pyenv local as shown previously python -m pip install pip-tools Now put your requirements in requirements.in, one on each line, in the form you would give them to pip on the command line: somepackage >=3, <4 otherpackage <7 Compile requirements.in to a requirements.txt: python -m piptools compile You could run the shorter command pip-compile for convenience, but using the long form with -m looks it up through your configured Python, and makes it less likely for you to surprise yourself and run a tool in a different virtualenv than you expected. Same with python -m pip above. Your requirements.txt will look something like this: otherpackage==6.9.3 # via -r requirements.in somepackage==3.4.2 # via -r requirements.in transitivedependency==2.7.6 # via somepackage It helpfully tells you where everything is from! Now to actually install these things you python -m pip -r requirements.txt. Now you’re good to go! Happy hacking! View the full article