Difference between revisions of "How to virtual environments"
Jump to navigation
Jump to search
(5 intermediate revisions by the same user not shown) | |||
Line 7: | Line 7: | ||
* '''Advantages:''' Virtual environments prevent conflicts between different projects by keeping dependencies isolated. They also make it easier to manage dependencies and ensure reproducibility across different environments. | * '''Advantages:''' Virtual environments prevent conflicts between different projects by keeping dependencies isolated. They also make it easier to manage dependencies and ensure reproducibility across different environments. | ||
<li>'''Installing Virtual Environment Tools:''' | <li>'''Installing Virtual Environment Tools:''' | ||
− | * '''Virtualenv:''' One of the most popular tools for creating virtual environments. Install it using pip: | + | * '''Virtualenv:''' One of the most popular tools for creating virtual environments. Install it using pip: <code>pip install virtualenv</code> |
* '''venv''' (Python 3.3+): A built-in module in Python for creating virtual environments. No need to install separately, but ensure you're using Python 3.3 or later. | * '''venv''' (Python 3.3+): A built-in module in Python for creating virtual environments. No need to install separately, but ensure you're using Python 3.3 or later. | ||
* '''Conda:''' A package manager, environment manager, and distribution of Python and other software packages for scientific computing. Install Anaconda or Miniconda from the official website: [https://conda.io/projects/conda/en/latest/user-guide/install/index.html Anaconda] or [https://docs.anaconda.com/free/miniconda/Miniconda Miniconda]. | * '''Conda:''' A package manager, environment manager, and distribution of Python and other software packages for scientific computing. Install Anaconda or Miniconda from the official website: [https://conda.io/projects/conda/en/latest/user-guide/install/index.html Anaconda] or [https://docs.anaconda.com/free/miniconda/Miniconda Miniconda]. | ||
<li>'''Creating a Virtual Environment:''' | <li>'''Creating a Virtual Environment:''' | ||
− | * '''Using virtualenv:''' | + | * '''Using virtualenv:''' <code>virtualenv myenv</code> |
− | <code>virtualenv myenv</code> | + | * '''Using venv:''' <code>python -m venv myenv</code> |
− | * '''Using venv:''' | + | * '''Using Conda:''' <code>conda create --name myenv</code> |
− | |||
− | * '''Using Conda:''' | ||
− | |||
Replace `myenv` with the desired name for your virtual environment. | Replace `myenv` with the desired name for your virtual environment. | ||
<li>'''Activating the Virtual Environment:''' | <li>'''Activating the Virtual Environment:''' | ||
− | * '''virtualenv or venv:''' | + | * '''virtualenv or venv:''' <code>source myenv/bin/activate</code> |
− | * '''Conda:''' | + | * '''Conda:''' <code>conda activate myenv</code> |
After activation, your command line prompt should indicate the active virtual environment. Remember to add this line also to your job-script. | After activation, your command line prompt should indicate the active virtual environment. Remember to add this line also to your job-script. | ||
<li>'''Installing Packages:''' Use `pip` to install packages within the activated virtual environment. | <li>'''Installing Packages:''' Use `pip` to install packages within the activated virtual environment. | ||
− | * '''Use `pip` to install packages within virtualenv or venv:''' | + | * '''Use `pip` to install packages within virtualenv or venv:''' <code>pip install package_name</code> |
− | * '''Use `pip` or `conda` to install packages within Conda:''' | + | * '''Use `pip` or `conda` to install packages within Conda:''' <code>pip install package_name</code> or <code>conda install package_name</code> |
<li>'''Freezing Dependencies:''' | <li>'''Freezing Dependencies:''' | ||
− | * After installing packages, freeze the dependencies into a `requirements.txt` file with virtualenv or venv: | + | * After installing packages, freeze the dependencies into a `requirements.txt` file with virtualenv or venv: <code>pip freeze > requirements.txt</code> |
* Conda automatically manages dependencies in its environment and does not require a separate requirements.txt file. | * Conda automatically manages dependencies in its environment and does not require a separate requirements.txt file. | ||
<li>'''Deactivating the Virtual Environment:''' | <li>'''Deactivating the Virtual Environment:''' | ||
* To deactivate the virtual environment and return to the global Python environment: | * To deactivate the virtual environment and return to the global Python environment: | ||
− | ** '''virtualenv or venv''': | + | ** '''virtualenv or venv''': <code>deactivate</code> |
− | ** '''Conda''': | + | ** '''Conda''': <code>conda deactivate</code> |
<li>'''Version Control:''' | <li>'''Version Control:''' | ||
* Include the `requirements.txt` file (if using virtualenv or venv) or `environment.yml` file (if using Conda) in your version control system (e.g., Git) to ensure that all collaborators can recreate the same environment. | * Include the `requirements.txt` file (if using virtualenv or venv) or `environment.yml` file (if using Conda) in your version control system (e.g., Git) to ensure that all collaborators can recreate the same environment. | ||
Line 37: | Line 34: | ||
<li>'''Updating Packages:''' | <li>'''Updating Packages:''' | ||
* Regularly update packages within the virtual environment: | * Regularly update packages within the virtual environment: | ||
− | ** With virtualenv or venv: | + | ** With virtualenv or venv: <code>pip install --upgrade package_name</code> |
− | ** With Conda: | + | ** With Conda: <code>conda update package_name</code> |
<li>'''Cleaning Up:''' | <li>'''Cleaning Up:''' | ||
* Periodically clean up unused packages and their dependencies: | * Periodically clean up unused packages and their dependencies: | ||
− | ** With virtualenv or venv: | + | ** With virtualenv or venv: <code>pip autoremove</code> |
− | ** With Conda: | + | ** With Conda: <code>conda clean --all</code> |
</ol> | </ol> | ||
Following these best practices ensures a clean and organized workflow when working with Python packages via virtual environments. It promotes reproducibility, simplifies dependency management, and helps avoid compatibility issues across different projects. | Following these best practices ensures a clean and organized workflow when working with Python packages via virtual environments. It promotes reproducibility, simplifies dependency management, and helps avoid compatibility issues across different projects. |
Latest revision as of 14:56, 17 September 2024
One possiblity to get access to to python packages on your HPC system that are not installed sytem wide is the local installation into you own virtual environment.
- Understanding Virtual Environments:
- Definition: A virtual environment is an isolated Python environment that allows you to install and manage dependencies separately for each project.
- Advantages: Virtual environments prevent conflicts between different projects by keeping dependencies isolated. They also make it easier to manage dependencies and ensure reproducibility across different environments.
- Installing Virtual Environment Tools:
- Virtualenv: One of the most popular tools for creating virtual environments. Install it using pip:
pip install virtualenv
- venv (Python 3.3+): A built-in module in Python for creating virtual environments. No need to install separately, but ensure you're using Python 3.3 or later.
- Conda: A package manager, environment manager, and distribution of Python and other software packages for scientific computing. Install Anaconda or Miniconda from the official website: Anaconda or Miniconda.
- Virtualenv: One of the most popular tools for creating virtual environments. Install it using pip:
- Creating a Virtual Environment:
- Using virtualenv:
virtualenv myenv
- Using venv:
python -m venv myenv
- Using Conda:
conda create --name myenv
- Using virtualenv:
- Activating the Virtual Environment:
- virtualenv or venv:
source myenv/bin/activate
- Conda:
conda activate myenv
- virtualenv or venv:
- Installing Packages: Use `pip` to install packages within the activated virtual environment.
- Use `pip` to install packages within virtualenv or venv:
pip install package_name
- Use `pip` or `conda` to install packages within Conda:
pip install package_name
orconda install package_name
- Use `pip` to install packages within virtualenv or venv:
- Freezing Dependencies:
- After installing packages, freeze the dependencies into a `requirements.txt` file with virtualenv or venv:
pip freeze > requirements.txt
- Conda automatically manages dependencies in its environment and does not require a separate requirements.txt file.
- After installing packages, freeze the dependencies into a `requirements.txt` file with virtualenv or venv:
- Deactivating the Virtual Environment:
- To deactivate the virtual environment and return to the global Python environment:
- virtualenv or venv:
deactivate
- Conda:
conda deactivate
- virtualenv or venv:
- To deactivate the virtual environment and return to the global Python environment:
- Version Control:
- Include the `requirements.txt` file (if using virtualenv or venv) or `environment.yml` file (if using Conda) in your version control system (e.g., Git) to ensure that all collaborators can recreate the same environment.
- Ignore the virtual environment directory (e.g., `myenv/`) to avoid cluttering the repository.
- Updating Packages:
- Regularly update packages within the virtual environment:
- With virtualenv or venv:
pip install --upgrade package_name
- With Conda:
conda update package_name
- With virtualenv or venv:
- Regularly update packages within the virtual environment:
- Cleaning Up:
- Periodically clean up unused packages and their dependencies:
- With virtualenv or venv:
pip autoremove
- With Conda:
conda clean --all
- With virtualenv or venv:
- Periodically clean up unused packages and their dependencies:
Following these best practices ensures a clean and organized workflow when working with Python packages via virtual environments. It promotes reproducibility, simplifies dependency management, and helps avoid compatibility issues across different projects.