Python Package Management and Conda
Mastering environment management, dependency resolution, and scientific computing workflows
Table of Contents
1. Environment Management
Core Operations
conda create -n env_name |
Create new environment |
conda create -n env_name python=3.9 |
Specify Python version |
conda create --clone base --name cloned_env |
Clone existing environment |
conda env export > environment.yml |
Export environment configuration |
conda env create -f environment.yml |
Recreate environment from file |
Advanced Control
# Create environment in specific location
conda create --prefix ./envs/project_env
# Remove unused packages
conda update --all --prune
# List all environments and their locations
conda info --envs
# Set environment variables
conda env config vars set MY_VAR=value
Best Practices
- Naming conventions: Use descriptive names (e.g.,
data-science-py39
) - Directory structure:
project/
├── envs/ # Local environments
├── environment.yml
└── src/ - Size optimization: Regularly clean unused packages (
conda clean --all
)
Pro Tip: Use conda env export --from-history
for minimal environment files that only include packages you explicitly installed.
2. Channel Management
Fundamentals
# Add conda-forge as primary channel
conda config --add channels conda-forge
# Set strict channel priority
conda config --set channel_priority strict
# View current channel configuration
conda config --show channels
Advanced Topics
# Add private channel
conda config --add channels https://private.repo.com/channel
# Create local channel mirror
conda index ./local-channel/linux-64
Pinning packages
# .condarc channels: - conda-forge - defaults # Pin specific package versions pin_run_as_build: python: 3.9.* numpy: 1.21.*
Security & Performance
- Verify channel SSL certificates with
conda config --set ssl_verify true
- Use
conda list --show-channel-urls
to detect channel conflicts - Configure local caching with
conda config --set use_only_tar_bz2 true
3. Conda vs Pip
Feature Comparison
Aspect | Conda | Pip |
---|---|---|
Non-Python Dependencies | ✅ Handles binaries (C libs) | ❌ Python-only |
Environment Isolation | ✅ Built-in | ❌ Needs venv/virtualenv |
Dependency Resolution | ✅ More robust | ❌ Can conflict |
Pure Python Packages | ⏳ Slower installs | ✅ Faster |
Reproducibility | ✅ environment.yml | ❌ Requires pip-tools |
Interoperability
# Using pip inside Conda (when necessary)
conda install pip
pip install package --no-deps # Minimize conflicts
# Convert requirements.txt to Conda format
conda install --file requirements.txt
When to Use Which
- Conda: Data science stacks, packages with binary dependencies (NumPy, SciPy, TensorFlow)
- Pip: Pure Python packages, web frameworks (Django, Flask)
- Hybrid: Use Conda for base environment, pip for Python-only packages
Warning: Mixing Conda and pip in the same environment can lead to dependency conflicts. Always install as many requirements as possible with Conda first, then use pip sparingly.
4. Dependency Management
Advanced Resolution
# Troubleshoot conflicts
conda search package --info
conda install package --dry-run
# Freeze currently installed versions
conda install --freeze-installed
# Force reinstall package
conda install package --force-reinstall
Reproducibility
# Exact environment specification
conda list --explicit > spec-file.txt
conda create --name new_env --file spec-file.txt
# Create portable environment
conda pack -n my_env -o my_env.tar.gz
# Docker integration example
FROM continuumio/miniconda3
COPY environment.yml .
RUN conda env create -f environment.yml
ENV PATH /opt/conda/envs/my_env/bin:$PATH
Reproducibility Tip: For production deployments, use conda-lock
to generate fully deterministic environment specifications.
5. Performance Optimization
Faster Operations
# Parallel downloads (default in newer versions)
conda install -q package # Quiet mode reduces output
# Use Mamba for faster resolution
conda install -n base -c conda-forge mamba
mamba install numpy pandas
# Clean caches
conda clean --all
Configuration Tweaks
# .condarc channels: - conda-forge - defaults channel_priority: strict sat_solver: libmamba always_yes: true auto_update_conda: false
6. Edge Cases & Troubleshooting
Issue | Solution |
---|---|
SSL errors in corporate environments | conda config --set ssl_verify false (temporarily) |
Inconsistent environment states | conda update --all or recreate environment |
CondaHTTPError | Check proxy settings, try different mirror |
Slow dependency resolution | Switch to Mamba or reduce channel count |
Environment activation issues | conda init then restart shell |
Additional Tools
- conda-tree: Visualize dependency trees
- conda-verify: Validate package integrity
- conda-build: Create custom Conda packages