26
votes

I am working on developing a python package. I use pip freeze > requirements.txt to add the required package into the requirement.txt file. However, I realized that some of the packages, instead of the package version, have some path in front of them.

numpy==1.19.0
packaging==20.4
pandas @ file:///opt/concourse/worker/volumes/live/38d1301c-8fa9-4d2f-662e-34dddf33b183/volume/pandas_1592841668171/work
pandocfilters==1.4.2

Whereas, inside the environment, I get:

>>> pandas.__version__
'1.0.5'

Do you have any idea how to address this problem?

1
Not sure why this is happening, but it looks like pip freeze is outputting a direct reference for some reason. There is a discussion on Github about this issue: pip freeze does not show version for in-place installs - adamgy
Does "pip list --format=freeze > requirements.txt" provide the expected results? - adamgy
Yes. "pip list --format=freeze > requirements.txt" resolved the problem. Thanks. - Naeem Khoshnevis
Glad I could help you, if I did, consider upvoting / accepting my answer ;) - adamgy
Done. I recently joined stackoverflow. Upvoting is not active yet :). - Naeem Khoshnevis

1 Answers

48
votes

It looks like this is an open issue with pip freeze in version 20.1, the current workaround is to use:

pip list --format=freeze > requirements.txt

In a nutshell, this is caused by changing the behavior of pip freeze to include direct references for distributions installed from direct URL references.

You can read more about the issue on GitHub:

pip freeze does not show version for in-place installs

Output of "pip freeze" and "pip list --format=freeze" differ for packages installed via Direct URLs

Better freeze of distributions installed from direct URL references