Clone and Run: What requirements.txt Is For#
A large share of this course comes down to one promise: if you clone my repository and follow a few commands, you will get the results I got. This page walks through those commands with the HW 0 repository.
The four steps#
git clone https://github.com/finm-32800/hw0.git
cd hw0
conda create -n finm python=3.12
conda activate finm
pip install -r requirements.txt
git clonecopies the repository, including its entire history, to your computer.conda createmakes a new, empty virtual environment namedfinmwith its own copy of Python 3.12. Nothing you install into it can disturb the other Python projects on your machine.conda activateswitches your terminal into that environment.pip install -r requirements.txtinstalls the packages that the project lists in itsrequirements.txtfile.
Now get the data and run the project’s dashboard:
doit
streamlit run src/app.py
doit is a task runner. It reads the file dodo.py, which lists the steps of
the pipeline and what each one depends on: get the data, then execute the
notebooks. We study it properly in week 2.
A browser window opens with an interactive version of this week’s analysis. You did not write any of that code, and you did not have to guess which packages it needs. The repository told your computer what to install.
Why the version numbers matter#
Open requirements.txt. Each line names a package and an exact version:
numpy==2.5.3
pandas==2.2.3
streamlit==1.64.0
The == is a pin. Compare it with a floor, such as pandas>=2.0, which
accepts any newer version. A floor is convenient. A pin is reproducible.
Software changes, and sometimes a new version of a package changes your numbers
without raising an error. One example from the packages used in finance
classes: the yfinance package changed the default of the auto_adjust option
of its download function from False to True. After the upgrade, the same
line of code returned prices adjusted for dividends and splits where it used to
return raw closing prices, and any returns computed from that column changed
with it.
In this week’s paper, small differences matter. The optimal portfolio weights are very sensitive to their inputs. If your collaborator’s environment differs from yours, you may both be “right” and still disagree.
Discussion
Look closely at the pinned versions. The wrds package requires an older
version of pandas than the newest one available. pip worked that out for
you when it resolved the dependencies. What would happen to this project in two
years if the versions were not pinned?
Different projects, different environments#
Try a second repository:
git clone https://github.com/jmbejara/streamlit_finance_chart.git
It has its own requirements.txt, with different packages and versions.
Installing both projects into the same environment will eventually produce a
conflict. The habit to build is one environment per project. We cover this
properly, including conda environment files and the newer tools uv and
pixi, in Virtual Environments in week 1.