如何定位virtualenv安装位置

3

部署现有Django应用程序到生产服务器。这是一个非常老的网站,已经三年没有更新了。

我被雇用来更新它,其中包括将Django版本升级到最新版本。这破坏了网站上许多东西,需要修复。

我进行了测试部署,一切顺利。现在是时候部署到生产环境了,但我遇到了一些问题...

首先,我要做的是记录服务器上当前的Django版本,以防出现任何问题时可以回滚。我尝试在Python命令提示符中登录并导入Django以查找版本号,结果显示未找到Django。

我继续查找,并在pip requirements.txt文件中找到了版本号。

然后我决定更新服务器上的实际Django版本。更新顺利进行。然后我检查了现场,发现一切都没有改变(旧文件仍然存在)。大部分网站应该已经崩溃了。它没有识别Django中的任何更改。

我认为原因可能是上一个承包商使用了virtualenv?这就是为什么它不能识别Django,或者Django更新没有对现场产生任何影响的原因?

这是我能想到的唯一解释,因为既然有pip requirements.txt文件,他很可能使用pip安装了Django,这意味着Python应该识别到Django的路径。

所以我想尝试找到virtualenv的源路径,使用命令“lsvirtualenv”。但是当我这样做时,甚至连这个命令也会给我一个“command not found”的错误。

我的唯一猜测是这是一个较旧版本的virtualenv,没有这个命令?如果不是这种情况,我不知道发生了什么。

你有什么建议吗?我如何使用可以访问的工具找到我需要更新的软件包版本的信息?


我猜测的原因可能是上一个承包商使用了virtualenv。为什么你要猜测呢?去查明吧! - undefined
为什么不从头开始呢? - undefined
通常情况下,会有nginx或apache作为反向代理,将请求转发给gunicorn或其他WSGI应用服务器。如果你能查看反向代理的配置,它应该能指引你朝正确的方向前进。 - undefined
我冒昧地修改了问题标题,因为这与定位virtualenv的位置更相关,而不是更新Django本身。 - undefined
也许你可以寻找bin/activate文件?就像这样:locate bin/activate - undefined
2个回答

2

创建自己的 virtualenv

如果一切失败,只需从 requirements.txt 中重新创建 virtualenv 并继续进行。

查找旧应用程序的启动方式

如果您坚持要找到旧应用程序,我认为最直接的方法是找出生产 Django 应用程序的运行方式。查找启动它的 bash 脚本、一些 supervisor 条目等。

如果找到了它的启动方式,那么就可以确定它所在的环境(例如哪个 virtualenv)。

通过搜索常见文件找到 virtualenv

除此之外,您可以使用 findlocate 命令来搜索我们知道存在于 virtualenv 中的文件,如 lib/pythonX.Y/site-packagesbin/activatebin/python 等。


Apache很可能是一个_反向代理_,通过某个端口(例如8000)将请求转发给Django,所以如果您使用相同的端口,就不需要更改它。Apache还为应用程序提供静态文件服务,所以如果静态文件在其指定的位置,您不需要做任何事情。基本上,您只需替换virtualenv,并且如果您在其中提供了所有依赖项,那么应该没问题。 - undefined
确认一下我的理解,你所说的“使用相同的端口”是指在Django上使用相同的端口吗?换句话说,如果我创建了一个新的环境,添加了所有的依赖,并复制了更新后的应用程序文件,只要Django使用相同的端口,主机就会将域名指向新的环境,是这样吗? - undefined
你是否正在使用Apache的mod_wsgi模块?因为这会改变一些事情。 - undefined
我会在你的Apache配置文件中搜索,你可能会找到你的虚拟环境的路径。 - undefined
这台服务器的工作是由一位老承包商完成的,所以我不确定Apache的设置情况(这就是为什么如果可能的话,我宁愿避免对其进行任何更改)。通常我是一个JS开发者,所以这是我第一次部署Python/Django应用程序,所以在这个领域我有点经验不足。过去我只有通过管理面板设置虚拟服务器的经验,并且它们通常提供公共文件夹供使用。以前从未手动编辑过Apache配置文件。 - undefined
显示剩余3条评论

0

为什么不开始检查实际运行的进程以及使用的命令行,使用ps auxf或类似的命令。这样你就知道是nginx+uwsgi还是django-devserver,甚至可以看到虚拟环境的路径,如果它是手动启动的话。然后,查看找到的服务器的配置文件。

或者,使用netstat -taupen之类的命令四处查看,看看哪些进程正在监听哪些端口。如果有像nginx之类的反向代理在运行,并且你知道它正在代理到哪里,这样做更有意义。

我会完全忽略requirements.txt文件。一旦你激活虚拟环境并运行pip freeze,你将得到相同但正确的信息。该文件最多是多余的,最坏的情况下会误导你。

顺便说一句,如果这个老承包商编译和安装了自定义的Python,他可能甚至没有使用虚拟环境,同时避免了系统库和PYTHONPATH。虽然不太可能,但也有可能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接