Issue
I'm running a project that uses pip and a requirements.txt file to install and keep track of some dependencies. I want to write some sh scripts to run, build and test the application. For starters I would like a way to check if the current folder is in a pyenv and, if not, create one to enclose the application and not mess around other people's dependencies. Also, I would like an opinion of the best way to keep track of this kind of dependencies, if the requirements.txt is a good approach and if there's a way to keep track of installed versions just like happens with node packages.
Solution
Use Pipenv. It's a better way of tracking your depencies than requirements.txt
and it uses Pyenv to automatically install your project's required Python version.
From the website:
The problems that Pipenv seeks to solve are multi-faceted:
- You no longer need to use
pip
andvirtualenv
separately. They work together.- Managing a
requirements.txt
file can be problematic, so Pipenv usesPipfile
andPipfile.lock
to separate abstract dependency declarations from the last tested combination.- Hashes are used everywhere, always. Security. Automatically expose security vulnerabilities.
- Strongly encourage the use of the latest versions of dependencies to minimize security risks arising from outdated components.
- Give you insight into your dependency graph (e.g.
$ pipenv graph
).- Streamline development workflow by loading
.env
files.[...]
Pipenv Features
- Enables truly deterministic builds, while easily specifying only what you want.
- Generates and checks file hashes for locked dependencies.
- Automatically install required Pythons, if
pyenv
is available.- Automatically finds your project home, recursively, by looking for a
Pipfile
.- Automatically generates a
Pipfile
, if one doesn’t exist.- Automatically creates a
virtualenv
in a standard location.- Automatically adds/removes packages to a
Pipfile
when they are installed or uninstalled.- Automatically loads
.env
files, if they exist.
Answered By - Marlon Richert Answer Checked By - David Goodson (WPSolving Volunteer)