您如何在本地和真实的 Linode 服务器(或类似服务器)上使用 virtualenv 设置 Python?

mar*_*n's 5 python linux virtualenv linode pycharm

在 Windows 上使用 PyCharm 并希望更好地了解如何设置我的本地环境,以便它尽可能干净地转换到我在 Linode(或任何其他 Linux 机器)上的服务器。

我有一个物理驱动器用于开发工作。就我而言,这是 drive Z:

我通常会为每个项目创建一个目录。一个项目被定义为一个完整的网站。

我目前还选择了一个目录Z:\virtualenv,用于创建我的虚拟环境。每个项目一个。我想多个项目可以共享相同的 virtualenv,但我不确定这对于开发或生产是否明智。

我已经考虑过将每个项目的 virtualenv 放在其相应项目中的想法。这对我很有吸引力,因为这样每个项目都将是整体的。例如,如果我们谈论 PyCharm 下的 Flask 应用程序:

d    z:\flask_app
d         .git
d         .idea
d         static
d         templates
d         virtualenv
          main.py
Run Code Online (Sandbox Code Playgroud)

那么,您如何设置上述生产服务器?

假设有人使用一台机器通过虚拟主机托管多个站点,这是其中之一:

<VirtualHost *:80>
  ServerAdmin you@example.com

  ServerName   example.com
  ServerAlias  example.com *.example.com
  DocumentRoot /var/www/example/public_html
  ErrorLog     /var/www/example/logs/access.log
  CustomLog    /var/www/example/logs/error.log combined

  <Directory   /var/www/example>
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
  </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我是否在全局服务器级别设置 virtualenv?我认为这是一个全球性的“是”。它不能以任何其他方式工作。我不认为。

好的,这确实意味着下的整个文件结构

z:\flask_app
Run Code Online (Sandbox Code Playgroud)

现在可以通过 FTP 进入

/var/www/example/public_html
Run Code Online (Sandbox Code Playgroud)

和网站好去吗?

我知道需要在生产机器上设置数据库服务器、数据库、表等才能匹配。我只是专注于 Python 与 virtualenv 从桌面开发环境到外部 Linux 生产环境的过渡。

我想我必须在服务器根级别使用 virtualenv 才能启用该虚拟环境,对吗?这是我对事情有点模糊的地方。我遇到的大多数教程都广泛地涵盖了您的本地开发环境,但很少涉及项目到生产服务器的转换、它们的设置以及与开发设置的持续关系。

我将使用带有 Ubuntu 14.04 LTS 的虚拟机来解决这个问题。

我还考虑使用 14.04 Desktop 在 VM 上进行开发,以便拥有匹配的环境并脱离 Windows。

Ivo*_*Ivo 3

1) 一个 14.04 桌面虚拟机只是为了在转移到服务器的脚本和命令行之前闲逛并把事情做好,这是一个好主意。

2)您可能碰巧喜欢virtualenvwrapper工具/项目。它几乎完全符合您当前的工作流程,但具有一些方便的便利(其全部要点)。它本质上以不同的名称(/文件夹)托管 virtualenvs 的中央文件夹。它最方便的命令是mkproject(创建一个新文件夹和同名的 virtualenv)和workon(激活该名称的项目)。

3) 幸运的是,14.04 并不太旧,它的软件包中已经存在一个相当新的 virtualenv python-virtualenv(1.11.4)。我会安装这个,然后用它在你的服务器上创建环境来运行 python 项目,正如你所建议的。

好的,这确实意味着...下的整个文件结构现在可以通过 FTP 进入...并且该站点可以使用了吗?

不,因为您会尝试在 Windows 计算机上传输为 Python 创建的 virtualenv,并希望它能够在 Linux/Ubuntu 上的 Python 下工作。

4) 要保留每个项目需要安装的软件包的托管列表,请将它们列在requirements.txt中。然后,当新的 virtualenv 处于活动状态时,您可以简单地运行pip install -r requirements.txt并为其安装所有需要的软件包。

5) For running your apps under the one server, I would suggest running a local WSGI server like Chaussette (perhaps under Circus) or uWSGI that hosts your python WSGI app under a local port / unix socket; then configure Apache or Nginx to reverse proxy all needed dynamic traffic to that server (see this SO answer as an example).

6) Some rudimentary bash scripting know-how can help a lot if you have things repeatably bootstrap-able :) If it gets even more complicated, you can use a managed configuration product like Salt.