Search code examples
pythonvirtualenv

Where do I put my python files in the venv folder?


I created a new Python project with PyCharm which yielded the following folder structure

myproject
└── venv
    ├── bin
    │   ├── activate
    │   ├── activate.csh
    │   ├── activate.fish
    │   ├── easy_install
    │   ├── easy_install-3.5
    │   ├── pip
    │   ├── pip3
    │   ├── pip3.5
    │   ├── python
    │   ├── python3
    │   └── python3.5
    ├── include
    ├── lib
    │   └── python3.5
    ├── lib64 -> lib
    └── pyvenv.cfg

Where do I put myproject.py or the myproject folder now?

  • Inside or outside of venv?
  • In the venv/binfolder?
  • Just inside venv, i.e. myproject/venv/myproject.py?

Solution

  • The virtual environment manages files which aren't yours. It doesn't care how you manage your own files. Put them wherever makes sense to you, just not anywhere inside the venv directory tree. Common solutions include directly in myproject, or in myproject/src.

    For what it's worth, one of the important use cases for virtual environments is the ability to delete one and start over. You obviously can't do that if you put stuff there which isn't part of the virtual environment. Regard it as ephemeral infrastructure.

    Another use case is the ability to have multiple virtual environments for the same project, so that you can test that your code works with different versions of the libraries you depend on, or even different Python versions.

    A common convention is to collect the libraries you need in requirements.txt so that you can create a new virtual environment, activate it, and pip install -r requirements.txt whenever you need to.