pip & venv & conda

This commit is contained in:
2025-08-26 23:35:46 +05:30
parent f40e82a9f0
commit 4b5abba9b9
4 changed files with 238 additions and 0 deletions

33
environment.yml Normal file
View File

@ -0,0 +1,33 @@
name: ani2
channels:
- defaults
dependencies:
- brotlicffi=1.0.9.2=py39h5da7b33_1
- bzip2=1.0.8=h2bbff1b_6
- ca-certificates=2025.7.15=haa95532_0
- certifi=2025.8.3=py39haa95532_0
- cffi=1.17.1=py39h827c3e9_1
- charset-normalizer=3.3.2=pyhd3eb1b0_0
- expat=2.7.1=h8ddb27b_0
- idna=3.7=py39haa95532_0
- libffi=3.4.4=hd77b12b_1
- openssl=3.0.17=h35632f6_0
- pip=25.1=pyhc872135_2
- pycparser=2.21=pyhd3eb1b0_0
- pysocks=1.7.1=py39haa95532_0
- python=3.9.23=h716150d_0
- requests=2.32.4=py39haa95532_0
- setuptools=78.1.1=py39haa95532_0
- sqlite=3.50.2=hda9a48d_1
- tk=8.6.15=hf199647_0
- tzdata=2025b=h04d1e81_0
- ucrt=10.0.22621.0=haa95532_0
- urllib3=2.5.0=py39haa95532_0
- vc=14.3=h2df5915_10
- vc14_runtime=14.44.35208=h4927774_10
- vs2015_runtime=14.44.35208=ha6b5a95_10
- wheel=0.45.1=py39haa95532_0
- win_inet_pton=1.1.0=py39haa95532_0
- xz=5.6.4=h4754444_1
- zlib=1.2.13=h8cc25b3_1
prefix: C:\Users\anivk\miniconda3\envs\ani2

13
requirements.txt Normal file
View File

@ -0,0 +1,13 @@
brotlicffi==1.0.9.2
certifi==2025.8.3
cffi==1.17.1
charset-normalizer==3.3.2
idna==3.7
pip==25.1
pycparser==2.21
PySocks==1.7.1
requests==2.32.4
setuptools==78.1.1
urllib3==2.5.0
wheel==0.45.1
win-inet-pton==1.1.0

View File

@ -0,0 +1,165 @@
Instead of polluting global Python, you create an isolated environment for each project:
```bash
# Create
python -m venv venv
# Activate
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# Install inside venv (isolated)
pip install flask
pip show flask
```
it will give location as
```bash
Location: c:\users\anivk\ccs_work\python-study-plan\study-plan-kuttan\.venv\lib\site-packages
```
Exit from venv
```bash
deactivate
```
pip show flask
```bash
Location: c:\users\anivk\.pyenv\pyenv-win\versions\3.10.5\lib\site-packages
```
Creating environments with Conda:
```bash
conda create -n <env-name>
```
To activate this environment, use
```bash
conda activate <env-name>
```
To deactivate an active environment, use
```bash
conda deactivate
```
To see a list of all your environments:
```bash
conda env list
conda info --envs
```
```bash
conda create -n ani2 python=3.9
```
when run pip freeze inside conda env
```bash
pip freeze > requirements.txt
```
Why does pip freeze show paths like file:///C:/b/abs...?
Conda installs many packages from pre-built binaries stored in its cache.
Instead of a simple package==version, pip records the exact location of the wheel or source (file:///...) to make the environment reproducible.
This happens especially with packages installed via Conda but visible to pip.
Option 1
```bash
pip list --format=freeze > requirements.txt
```
Option 2: Export with Conda
```bash
conda list --export > requirements.txt
```
or even better:
```bash
conda env export > environment.yml
```
requirements.txt works for pip-only workflows.
environment.yml is preferred for Conda because it keeps Python version, Conda channels, and exact package versions.
Then remove one env(example: ani2):
```bash
conda remove --name ani2 --all
```
almost everything in your environment.yml is Conda system/runtime packages, not packages you explicitly use in your project. Let me break it down for you:
1⃣ Conda runtime / system packages
These are installed automatically by Conda when you create an environment or install Python. They support the Python interpreter itself and the OS runtime:
python=3.9.23 → Python interpreter
pip=25.1, setuptools, wheel → packaging tools
`openssl`, `libffi`, `sqlite`, `tk`, `zlib`, `xz`, `ca-certificates` → system libraries
`vc`, `vc14_runtime`, `vs2015_runtime`, `ucrt` → Windows C/C++ runtime
`tzdata` → timezone database
These are needed for Python to run, but your code doesnt explicitly “use” them.
2⃣ Packages you actually use
`requests`, `urllib3`, `certifi`, `idna`, `charset-normalizer`, `cffi`, `pycparser`, `pysocks`, `brotlicffi`
These are Python packages your project may import.
3⃣ Why this matters for deployment
The Conda environment is large because it includes all the runtime libraries and build dependencies.
If you dont use Conda for deployment (e.g., youre deploying via Docker or serverless Python), these packages consume extra disk space unnecessarily.
⚡ Recommendation for deployment
Use a minimal requirements.txt with only the packages your project actually imports:
```bash
requests==2.32.4
urllib3==2.5.0
certifi==2025.8.3
charset-normalizer==3.3.2
idna==3.7
```
Then deploy using pip instead of Conda.
Optional: If you need Python 3.9 specifically:
```bash
FROM python:3.9-slim
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . /app
```
This avoids installing all the Conda runtime libraries, saving space.
✅ In short:
Most of your environment.yml is Conda runtime dependencies, not your project code.
For deployment, a minimal pip requirements or Docker with Python slim image is much lighter.

27
src/intermediate/pip.md Normal file
View File

@ -0,0 +1,27 @@
Install directly with pip
it installs the package globally into your systems Python installation (unless youre inside a virtual environment).
```bash
pip install requests
```
Check if installed
```bash
pip show requests
```
Save to requirements.txt
You can manually create requirements.txt
or
Or generate it automatically:
```bash
pip freeze > requirements.txt
```
Install from requirements.txt (read from requirements file)
```bash
pip install -r requirements.txt
```