Creating the virtual environment outside of the project folder, still retaining the feel of good ol' "python -m venv venv".
Project description
๐ venvlink
The job of venvlink
is create a link for the ./venv/Scripts/activate
script inside the project folder and, if needed, create a virtual environment outside your project folder, using python -m venv <project_name>
.
Table of Contents
- Without venvlink
- With venvlink
- Motivation
- Installing
- Getting started
- Considerations
- Venvlink and other tools
- Contributing
Without venvlink
This is how work with virtual environments looks like with python -m venv venv
:
With venvlink
With venvlink
the virtual environment is created in a centralized folder, and only a proxy ("link") of the activate
script is created to the project folder:
Motivation
The reason for one using venvlink might be one or multiple from below.
๐ซ๐ค don't backup venv/*
If you want to keep your virtual environments from being backed up to e.g. OneDrive/Dropbox or other backup service with your project files, venvlink is one way to do it. You might want to do this to save space on your cloud storage or resources on your computer / network (prevent checking and uploading new/modified files).
๐๏ธ๐งนcentralized & tidy
If you want to centralize your virtual environments just because you think it is clean or it makes you happy.
โจโป๏ธ reusability
If you want to reuse some of your virtual environments in multiple projects (sharing same imports) or want to use a general (tmp)
virtual environment for all of your one-off testing, for example.
๐๏ธโ๏ธrelocating projects
If you want to be able to relocate projects on hard disk (on same machine) by just copy-pasting them, even with virtual environments. Or, if you want to be able rename a part of the project path without breaking the virtual environment.
๐๐ฏ centralized, but with an activate
script
If you want to have centralized virtual environments, but would want to activate them, without having to remember the name of the virtual environment, just by running
./venv/Scripts/activate
The activate
script in your project folder is just a proxy ("link") for the real activate
script located elsewhere.
๐๏ธ๐ค remove anytime
The venvlink
philosophy is that a tool should not chain it's user. You can remove it anytime and your virtual environments and activate proxy scripts will still work. Venvlink is only used for creation of virtual environments.
๐ผโ๏ธ works with an existing venv collection
If you happen to have already a collection of virtual environments inside one folder, you can start using them with venvlink
right away. Just configure the venv_folder
in the .venvlinkrc
, and you're good to go.
๐๐ multipython
It is not a problem if you have multiple python versions installed. The syntax is
<path_to_python_exe> -m venvlink ...
Therefore, you can use venvlink
on Python 3.6.4 32-bit
and Python 3.9.2 64-bit
at the same time. What you need to do is to install venvlink
for both python versions with
<path_to_python_exe> -m pip install venvlink
<path_to_another_python_exe> -m pip install venvlink
and the rest you can use normally. Note that virtual environments in the centralized folder will have the same python version which was used to create the virtual environment in the first place. You can later on use your main python executable to create more links for an existing virtual environment, no matter what version of python it is using. Use descriptive venv names to distinguish the venvs with different python versions, if needed.
โจ๐ฅ auto-activate
The venvlink
supports a Powershell addon called venvlink-autoenv which will automatically activate/deactivate the virtual environment on Windows Powershell! (Works also with example VS Code Integrated Terminal, when Powershell is selected )
New in version 0.5.0
Installing
Requirements
venvlink
is currently supporting only Windows, but it shouldn't be too hard to create Linux/maxOS support. I personally use only Windows, but I would be really happy to receive pull request(s) for Linux/macOS support.
Installation with pip
pip install venvlink
For installation for development, see CONTRIBUTING.md.
Getting started
โจ Creating a virtual environment
Assume that you have a project at
C:\workdir\someproject\
and you would like to create virtual environment for that folder. Instead of the regular
PS C:\workdir\someproject> python -m venv venv
using venvlink
one would type
PS C:\workdir\someproject> python -m venvlink project-name
This would create, inside your project directory, a venv
folder with only few files (<1Kb in total), such as the activate
script.:
venv
โโโ Scripts
โย ย โโโ Activate.ps1
โย ย โโโ activate
โย ย โโโ activate.bat
โโโ venvlink
and inside your venv_folder
(located elsewhere), the actual virtual environment files (can be up to hundreds of Mb, and thousands of files):
project-name/
โโโ Include
โโโ Lib
โย ย โโโ site-packages
โโโ Scripts
โย ย โโโ Activate.ps1
โย ย โโโ activate
โย ย โโโ activate.bat
โย ย โโโ deactivate.bat
โโโ pyvenv.cfg
โโโ share
To activate the virtual environment (project-name)
, you would call
PS C:\workdir\someproject> .\venv\Scripts\activate
which would then call transparently*
C:\Python\venvs\project-name\Scripts\activate
and result you having that virtual environment activated, as:
(project-name) PS C:\workdir\someproject>
[*] assuming that you have defined the venv_folder
to be C:\Python\venvs\
in the .venvlinkrc
.
๐โ Getting help
You can use the -h
flag:
PS C:\somepath\project> python -m venvlink -h
usage: venvlink [-h] [--init] [-d] [-S] [projectname]
venvlink 0.3.1
positional arguments:
projectname
optional arguments:
-h, --help show this help message and exit
--init Initiate the venvlink configuration file (.venvlinkrc)
-d, --delete Delete the virtual environment associated with project_name (instead of creating)
-S, --system-site-packages
Give the virtual environment access to the system site-packages dir.
๐๏ธ Removing virtual environments
If you want to fully remove a virtual environment and all its contents, you can either run
python -m venvlink -d <venv_to_be_removed>
or just navigate to the centralized virtual env folder, and remove the folder(s) you want. There is no centralized bookkeeping between the virtual environments and the activate
proxies (just a one-way link from proxy to the venv), and therefore all activate
proxies associated with the venv will stop working after deletion, or until a venv with same name is created.
If you want to just remove the link between a virtual environment and your project, you can safely remove the activate
proxy/link from your project folder. If you are planning to create a link to another virtual environment, you can simply
python -m venvlink anothervenv
All what this does is recreates the proxy and, if anothervenv does not exist, creates anothervenv.
๐ ๏ธ Configuration
See: Configuration.
Considerations
๐โ Special cases
Moving your virtual environment to centralized place means that you'll might have to tell to some tools where you have located your virtual environments. One example is pylint
, which needs to kown where the project venv is located, to prevent false positive import-error
s. See: Usage with linters (e.g. pylint).
๐ก๐ File structure tip
Following file structure has found to be useful:
C:\Python\Python365\ # python installation
C:\Python\Python386\ # python installation
C:\Python\Python386-32\ # python installation
C:\Python\Python392\ # python installation
C:\Python\venvs\ # virtual environments
since it is easy to find python.exe
behind for creating a venv
C:\Python\Python386\python.exe -m venvlink myproj
and it is also easy to browse the venvs when they are after a short path.
๐๐ venvlink and other tools
These tools work well together and have synergies with venlink
:
- venvlink-autoenv: The Powershell addon for venvlink >= 0.5.0.
- pyenv-win: Python version management/switcher
- pew: Virtual environment management
Other tools and how they relate to venvlink
:
Contributing
What? | How? |
---|---|
๐ Found a bug? | ๐ File an Issue |
๐โโ๏ธ Need help? | โ Ask a question on StackOverflow |
๐ก Got a suggestion? | ๐ซ File an Issue (feature request) |
๐ง Want to write code? | ๐ฅ Here's how you get started! |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file venvlink-0.5.0.tar.gz
.
File metadata
- Download URL: venvlink-0.5.0.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.55.0 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7840803615477e022c5bc7f2f86630d6ce0e8850805c554eb744d9606166d2a2 |
|
MD5 | c6100f2359afc8c5997c8b207a77574b |
|
BLAKE2b-256 | 5882a11d6c3d5ca6a825c77239e303818137286b29807a24bd599fd4fc32c052 |