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

时间:2014-06-23 02:23:35

标签: python linux virtualenv pycharm linode

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

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

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

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

我已经考虑过将每个项目的virtualenv置于其相应的项目中。这对我很有吸引力,因为那时每个项目都是单一的。例如,如果我们在PyCharm下讨论Flask应用程序:

d    z:\flask_app
d         .git
d         .idea
d         static
d         templates
d         virtualenv
          main.py

然后,如何根据上述内容设置生产服务器?

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

<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>

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

好的,这确实意味着

下的整个文件结构
z:\flask_app

现在可以通过FTP进入

/var/www/example/public_html

并且网站很好用吗?

我知道需要在生产计算机上设置数据库服务器,数据库,表等以进行匹配。我只是专注于Python,将virtualenv从桌面开发环境转换到外部Linux生产框。

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

我将使用带有Ubuntu 14.04 LTS的虚拟机来解决这个问题。在我前进的过程中。

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

2 个答案:

答案 0 :(得分:3)

1)一台14.04桌面虚拟机只需要在转移到脚本之前进行处理,并且服务器的命令行是个好主意。

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

3)幸运的是,鉴于14.04并不太旧,它的软件包python-virtualenv(1.11.4)中已经出现了相当多的virtualenv。我会安装它,然后使用它在服务器上创建环境,以便在你的建议下运行python项目。

  

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

不,因为您试图在Windows机器上传输为Python创建的virtualenv,并希望它可以在Linux / Ubuntu上的Python下运行。

4)要保留每个项目需要安装的托管列表,请在requirements.txt中列出它们。然后使用新的virtualenv激活,您只需运行pip install -r requirements.txt并为其安装所有需要的包。

5)为了在一台服务器下运行您的应用程序,我建议运行一个本地WSGI服务器,如Chaussette(可能在Circus下)或uWSGI下托管您的python WSGI应用程序本地端口/ unix套接字;然后配置Apache或Nginx以反向代理该服务器所需的所有动态流量(以this SO answer为例)。

6)如果你有可重复引导的东西,一些基本的bash脚本知识可以帮助很多:)如果它变得更复杂,你可以使用托管配置产品,如Salt

答案 1 :(得分:1)

考虑一下:您的Git存储库应包含与开发该项目相关的源代码,数据文件和其他文件。它不应该包含virtualenv,因为它是可执行文件(Python,pip),头文件和从各种源安装的依赖项的混合。应该可以擦除虚拟现实并重建它而不会有太多麻烦。

尽管您可以在同一目录中拥有source和virtualenv,但无论如何您都需要更新.gitignore文件,这表明在其他地方找到所有virtualenvs是有意义的。这不是FTP将整个目录放到另一个目录中的问题:你应该将更新代码的概念与设置virtualenv(可能安装了不同于开发机器的软件包)的概念分开。

例如,您将在Windows计算机上进行开发并部署到Linux计算机,这可能会导致使用不同的程序包。因此,将“项目源代码”与“运行所需的依赖项和配置”分开是非常重要的。

同样,在生产服务器上,您可以为virtualenvs指定一个位置,并且所有项目(在您选择的目录结构中将其代码安装在某处)将激活virtualenv然后运行。只要每个进程都有足够的权限来执行它,就没有错误或正确的方法。

根据您希望将多少自动化部署到部署中,您应该考虑至少自动化一点以确保其正常工作。它归结为设置目录结构,权限,从git检出代码,设置virtualenv,安装依赖项以及任何其他剩余配置以使工作正常。例如,您可以使用Ansible执行这些任务。

一般来说,最好不要将您的应用程序视为一个单一的东西,因为随着时间的推移,事物可能会移动到其他位置。静态文件?他们有一天可能需要去内容交付网络。数据库安装?有一天可能需要搬到另一台机器上。等等。