[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Why do I need to use pip3 but not pip

On 2019-03-30 15:57:55 +0530, Arup Rakshit wrote:
> This is awesome. Now where should I put my source code? I see many folders into it.

You don't. In my opinion virtual environments should be expendable: You
can destroy and recreate them at will. That leaves two possibilies:

1) Use a "central repository" of virtual environments. For example, I
   have a directory ~/venv/ which contains the virtual environments.

   My project directories are elsewhere, so when I'm working on a
   project, I' usually do something like:
    % venv project-environment
    % cd ~/wrk/project/src
    % pip install -r requirements.txt 
   The first (venv is a litte shell function I wrote, see below)
   activates the environment, the second cds to the source code (note
   that the environment and the project don't have to have the same
   name, although they often do), the third installs any required
   packages into the virtual environment (of course I do that only after
   they change, not every time).

2) Put each virtual environment into a subdirectory of the project, like
        ??? project1
        ??? ??? src
        ??? ??? venv
        ??? project2
            ??? src
            ??? venv

   Then I would do something like:
    % cd project1
    % venv
    % cd src
    % pip install -r requirements.txt

I started with the second method and switched to the first. I like the
flexibility: I can reuse the same environment for multiple projects or
test the same project in multiple environments. I can also easily see
which environments I have and delete them if I don't need them any more
(I can always recreate them with pip install -r requirements.txt)

The requirements.txt file contains the packages your project needs.
Every project should have one. Some people like to generate it
automatically with "pip freeze", but I prefer to write it myself and put
only first-level requirements (not requirements of those requirements)
into it. I also only put version numbers into it if I know that I need a
specific version (or range of versions). Normally getting the newest
version is fine.

Finally, here is my venv function:

venv() {
    for d in venv/"$1" ve/"$1" ~/venv/"$1" "$1"
        if [ -f "$d"/bin/activate ]
            . "$d"/bin/activate


   _  | Peter J. Holzer    | we build much bigger, better disasters now
|_|_) |                    | because we have much more sophisticated
| |   | hjp at         | management tools.
__/   | | -- Ross Anderson <>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <>