Pip要求输出全局软件包。
问题的出现原因是作者在评论中看到了一个简洁的选项,但是这个选项没有被明确提出来。为了避免其他人也错过这个选项,作者将其作为一个单独的答案发布,并进行了一些修改。
解决方法之一是在运行带有system-site-packages的虚拟环境时,使用--local
标志来添加pip freeze。例如,如果你运行了以下命令创建虚拟环境:
py -m venv --system-site-packages env
为了确保你的requirements.txt
中不包含所有系统依赖项,只需运行以下命令:
python -m pip freeze --local > requirements.txt
另一个稍微复杂一些的选项是手动修改位于虚拟环境库中的pyvenv.cfg文件。找到include-system-site-packages = true/false
这一行,并根据需要进行手动更改。
感谢这个解决方法,对我很有帮助。
Pip requirements outputting global packages问题的出现原因是虚拟环境可以访问系统的site-packages目录,这是正常的情况。解决方法有两种:重新创建虚拟环境或者添加一个no-global-site-packages.txt文件告诉pip忽略全局site-packages。
如果想重新创建虚拟环境,可以删除原来的环境文件夹,然后重新创建。如果想检查虚拟环境是否使用了system-site-packages,可以通过检查首次freeze时是否包含它们来判断。检查是否存在no-global-site-packages.txt文件可以提供相关信息。
有一个no-global-site-packages.txt文件,但是我的requirements文件不应该包含rhythmbox-ubuntuone==3.0.0 sessioninstaller==0.0.0 simplejson==2.3.2 software-center-aptd-plugins==0.0.0 ssh==1.7.14 system-service==0.1.6 ubuntuone-couch==0.3.0 ubuntuone-installer==3.0.2 ubuntuone-storage-protocol==3.0.2。这个问题让我感到困惑。
尝试使用pip freeze --local命令和sudo pip install --upgrade pip virtualenv命令是否有帮助。重新设置环境似乎可以生成一个更小且正确的requirements文件。除了使用pip之外,还有其他评估Django文件的要求的方法吗?
感谢提供--local选项来冻结pip的requirements。请将这个信息包含在回答中,因为我很久以来一直在寻找这个选项。