Package Management
Effective package management is crucial for maintaining clean, reproducible Python projects. This chapter covers best practices for managing dependencies and packages.
Dependency Management
Requirements Files
The standard way to manage dependencies is using requirements.txt:
requests==2.28.0numpy>=1.20.0,<2.0.0pandas==1.5.3matplotlibGenerating Requirements
Create a requirements file from installed packages:
pip freeze > requirements.txtInstalling from Requirements
pip install -r requirements.txtVersion Pinning Strategies
Exact Version Pinning
requests==2.28.0numpy==1.24.0Pros: Reproducible builds Cons: May miss security updates
Minimum Version
requests>=2.25.0numpy>=1.20.0Pros: Gets updates automatically Cons: May break with incompatible updates
Version Range
requests>=2.25.0,<3.0.0numpy>=1.20.0,<2.0.0Pros: Balance between stability and updates Cons: Requires careful version management
Separating Development Dependencies
requirements.txt (Production)
requests==2.28.0numpy==1.24.0pandas==1.5.3requirements-dev.txt (Development)
-r requirements.txtpytest==7.2.0black==22.10.0flake8==5.0.0Install development dependencies:
pip install -r requirements-dev.txtPackage Organization
Project Structure
my_project/ requirements.txt setup.py README.md src/ my_package/ __init__.py module1.py module2.py tests/ test_module1.py test_module2.pyUpdating Packages
Check for Outdated Packages
pip list --outdatedUpdate All Packages
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -UUpdate Specific Package
pip install --upgrade package_nameSecurity Considerations
Check for Vulnerabilities
Use tools like safety:
pip install safetysafety checkKeep Packages Updated
Regularly update packages to get security patches:
pip install --upgrade package_nameBest Practices
- Use virtual environments: Isolate project dependencies
- Pin versions: Use exact versions in production
- Document dependencies: Keep requirements.txt updated
- Separate dev dependencies: Use requirements-dev.txt
- Regular updates: Update packages regularly for security
- Test after updates: Verify everything still works
- Use version ranges carefully: Balance stability and updates
Exercises
Exercise 1: Creating Requirements File
Create a requirements.txt file content with numpy version 1.24.0, pandas version 1.5.3, and matplotlib (any version). Write the content as a string and print it.
Creating Requirements File
requirements = """numpy==1.24.0pandas==1.5.3matplotlib"""
print(requirements)