升级的Python;我是否必须手动重新安装所有站点包?

时间:2017-08-08 09:00:28

标签: python pip

我最近提升了我的Linux发行版。 Python 3.5被Python 3.6取代。

我使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form action="" method="post" class="comment-form"> <input name="test1" class="test1" type="text" value=""> <input name="test2" class="test1" type="text" value="1"> <input name="test3" class="test1" type="text" value=""> <input name="submit" class="submitform" type="submit" id="submit" value="Submit"> </form> <form action="" method="post" class="comment-form"> <input name="test1" class="test1" type="text" value=""> <input name="test2" class="test1" type="text" value="2"> <input name="test3" class="test1" type="text" value=""> <input name="submit" class="submitform" type="submit" id="submit" value="Submit"> </form> <form action="" method="post" class="comment-form"> <input name="test1" class="test1" type="text" value=""> <input name="test2" class="test1" type="text" value="3"> <input name="test3" class="test1" type="text" value=""> <input name="submit" class="submitform" type="submit" id="submit" value="Submit"> </form>安装的所有网站包仍然在pip3目录中,Python现在没有找到它们,因为它显然在/usr/lib/python3.5/site-packages中查找。

我看到目录内容,我可以再次手动安装它们,但这并不像我这样做的正确方法。我可以将内容移动到新目录,但同样,这在我看来也是错误的。

我该如何妥善处理?

我应该在升级之前准备好.../python3.6/site-packages列表吗?

我尝试搜索,但关键字可能过于笼统,并得到了许多无关的答案。

3 个答案:

答案 0 :(得分:1)

Python 3.5被Python 3.6取代。但是你仍然有使用python 3.5的备份选项。

如果你想使用python 3.6,你将不得不为python 3.6再次重新安装所有pip包。这是有道理的。

假设您从2.7更改为3.5。您可能希望单独保留两个环境。因此3.6环境与3.5不同。

快速执行此操作的方法是pip freeze for 3.5,然后安装3.6的依赖项。

pip freeze > reqs.txt

升级

pip install -r reqs.txt

由于您不再拥有此选项,请先尝试列出python3.5中的所有包

为此你可以按照@kabanus的说法安装pip3.5。

sudo apt-get install python3=3.5.1*
sudo python3.5 easy_install.py pip

此外,建议每个项目使用虚拟环境,以便为每个项目维护单独的环境。

答案 1 :(得分:1)

这会让您重新安装更简单。结帐the description。使用freeze你可以做类似的事情:

$ env1/bin/pip3 freeze > requirements.txt
$ env2/bin/pip3 install -r requirements.txt

一般来说推荐的方法是使用virtualenv用于网站套餐,这样你就不会乱丢你的安装区域,但TBH从来没有为我打破过一些东西。另一个选择是检查linux发行版是否有可用于正确检索的包,如:

sudo apt-get install python3-<somemodule>

这是我更喜欢的 - 并且可以使用发行版进行升级。至于现在该做什么,如果你真的不想正确地重新安装一切,你可以尝试cp /usr/lib/python3.5/site-packages/* /usr/lib/python3.6/site-packages。版本之间的差异并不是那么大,以至于我相信大多数软件包都会起作用。尽管如此,您可能必须sedpython3.5替换为所有文件中的python3.6。如果您执行此操作,忘记会删除所有pyc个文件。

Python模块是自包含的,如果某些内容被破坏,它可以按包处理,并且网站包完全自包含,所以你总是可以删除所有内容并重新安装。

最后一点 - 您可以尝试为您的linux安装pyton3.5 / pip3.5,然后执行冻结操作。如果没有软件包,您可以手动安装(whl等)或单独编译并正确配置站点路径。如果您想将事物保存在全局站点包目录中或迁移到virtualenv,这可能是最安全的选择。

答案 2 :(得分:1)

我刚刚遇到了从Python 3.6升级到Python 3.7的相同问题,我忘记运行pip freeze 之前,我升级到Python 3.7。有效的解决方案是将--path选项指定为 old site-packages/目录(未删除):

pip3 freeze --path /usr/local/lib/python3.6/site-packages/ > python3.6_requirements.txt
pip3 install -r python3.6_requirements.txt