4 ms·
I was slow to get to grips with venv. It sounds like you are on the same path. This note tries to be constructive advice - * Some distro software uses python.
by cturner 5y ago
I was slow to get to grips with venv. It sounds like you are on the same path. This note tries to be constructive advice -
* Some distro software uses python. Let the package manager take care of dependencies for that.
* For everything else, use an dedicated virtualenv for each codebase you are working with.
> I used to just use pip to install to the system
Never do this, for the reasons you cite.
> I've dabbled with virtualenv, but it's such a pain to set up and activate
Setup for virtualenv: "python3 -B -m venv venv". Have a shell alias 'alias v=". venv/bin/activate"' that allows you to activate it if you need to install libraries or access a shell. "pip install blah" for library install. That should be all you need.
> If I have a few projects with similar libraries
> it's more of a pain to set them all up and switch around
Have a think about why you feel this way, and whether you could mitigate the problems.
Here is what I do. Once my libraries are installed for the current project, I rarely activate venv in the current shell. Rather, for each python project, I have a bash script "app" in the root of the project, and a dedicated "venv" directory.
The app script does the following: (1) sources the local venv; (2) does pip freeze > requirements.txt to capture any dependency changes; (3) launches the project. Often I will have multiple launchers in that script, with all of them commented out except for the active one. Be in a habit of always launching from that app script.
To reiterate the approach above, whenever you sit down to write some python code, ensure that you have a dedicated venv for it, and that you are only ever launching code from that local venv.
I have spoken to developers who get upset at the extra hard disk overhead. You don't need to optimise for hard disk usage. Hard disk space is almost free.
I don't bother creating setup.py files, except for the odd occasion that I want to publish code to pip. Good luck.
- pfranz 5y agoThanks for taking the time to share! That's sounds like the general approach I take for "projects" even toy projects. My day jobs have never fit the virtualenv use-case. So at home I often have to look up how to use it. It's so rare that when I make an alias I even forget those. Most new things are one-off scripts; move or rename some files, extract data from something, or pull from a resource. Something that requires libraries or is too big for a shell script. For example, the last one I see in my bin is a web scraper for appointments. It pulls a website, fills out a form, and gets the result a few times--about 70 lines. What's annoying is sourcing some environment just to run this one tool. Most people have a directory of scripts (a mix of shell, Perl, or Python) they use if they spend a lot of time at a commandline. It's quite a pain to source the environment just to run a quick script. That's generally the libraries I install into user. I don't care much about the version and troubleshoot things as they come up.