Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I know which commit was used when installing a pip package from git?

Tags:

git

python

pip

If I install a package from git using https://pip.pypa.io/en/stable/reference/pip_install/#git does the specific commit that was checked out logged somewhere?

like image 469
Ophir Yoktan Avatar asked Aug 14 '17 18:08

Ophir Yoktan


People also ask

How do I check pip installation list?

To do so, we can use the pip list -o or pip list --outdated command, which returns a list of packages with the version currently installed and the latest available. On the other hand, to list out all the packages that are up to date, we can use the pip list -u or pip list --uptodate command.

What is pip install Git+?

Pip is a package manager of python. You can download Python libraries from some Python repositories like PyPI . You can also download libraries from a git repository.

What pip operation would you use to check what packages have been installed so far?

Pip Check Command – Check Python Dependencies After Installation. Because pip doesn't currently address dependency issues on installation, the pip check command option can be used to verify that dependencies have been installed properly in your project.

Where does pip install pull packages from?

By default, pip installs packages located in the Python Package Index (PyPI), but can also install from other indexes.


1 Answers

You could use knittl's idea to find the nearest commit -- the only modification below is to address the fact that you are comparing the git tree to an installed package, not a git repository:

Since the installed package may lack some of the directory structure of the git repository, make a new directory for the git repo. I'll use html5lib for an example:

mkdir ~/tmp/html5lib
cd ~/tmp/html5lib/
git init

Now fetch the git tree:

git remote add foreign https://github.com/html5lib/html5lib-python
git fetch foreign

Copy the installed package into the git repo:

rsync -a ~/.virtualenvs/muffy/lib/python3.4/site-packages/html5lib ~/tmp/html5lib/

Run git diff to compare the current state of the repo (with the installed package's code) to each revision in the git tree:

for REV in $(git rev-list --all); do
    echo $(git diff --shortstat foreign/master $REV) $REV ;
done | sort -n

This sorts by the number of files changed, then the number of insertions, then deletions. The output will look something like this:

1 file changed, 3 insertions(+), 1 deletion(-) 17499b9763a090f7715af49555d21fe4b558958b
2 files changed, 10 insertions(+), 8 deletions(-) ec674a97243e76da43f06abfd0a891308f1ff801
3 files changed, 17 insertions(+), 12 deletions(-) 1a28d721091a2c433c6e8471d14cbb75afd70d1c
4 files changed, 18 insertions(+), 13 deletions(-) ff6111cd82191a2eb963d6d662c6da8fa2e7ddde
6 files changed, 19 insertions(+), 19 deletions(-) ea0fafdbff732b1272140b696d6948054ed1d6d2

The last item on each line is the associated git commit.

If the git history is very long you'll want to modify git rev-list --all to a range of commits. For example, use git rev-list tag1..tag2 to search between two tags. If you know approximately when the package was installed, you might have a good guess for what tags to use. Use git tag to show the names of the possible tags. See the docs for more options.

like image 64
unutbu Avatar answered Oct 11 '22 17:10

unutbu