如何在没有pip或virtualenv的情况下安装Python包
我需要把一个Python应用程序部署到一个我无法控制的生产服务器上(Ubuntu),而且我没有权限使用apt-get
、pip
、virtualenv
等工具。目前,这个服务器上运行的是Python 2.6以上的版本。我需要安装pycrypto
作为这个应用的依赖,但由于我的权限有限,我不太确定该怎么做。我唯一能做的就是用wget
下载资源,然后解压这些资源,或者做一些类似的事情。
首先,我想知道有没有可能在不安装的情况下使用它?如果不行的话,我能不能下载这个包,然后把__init__.py
文件放到pycrypto目录里,这样Python就知道怎么找到它了,像这样:
/my_app
/pycrypto
/__init__.py
/pycrypto.py
2 个回答
使用 easy_install
。在Ubuntu上,Python 2.6及以上版本应该已经安装好了这个工具。如果没有的话,可以查看这些安装说明。
根据 PEP370 的说明,从 python 2.6 开始,你可以为每个用户设置一个独立的目录(具体可以查看 Python 2.6 新特性)。
这样,你就可以使用 easy_install
的 --user
选项来为每个用户安装包,而不是全系统安装。我相信 pip
也有类似的选项。这种方式不需要任何特别的权限,因为它只使用当前用户的目录。
如果你没有安装任何安装工具,你可以手动将包解压到:
~/.local/lib/python2.6/site-packages
或者,如果你是在 Windows 系统上,可以解压到:
%APPDATA%/Python/Python26/site-packages
以 pycrypto
为例,这个包在安装之前需要 构建,因为它包含一些 C 语言代码。源代码里应该有一个 setup.py
文件。你需要运行以下命令来构建这个库:
python setup.py build
之后,你可以通过以下命令在用户目录中安装它:
python setup.py install --user
需要注意的是,构建阶段可能需要一些 C 语言库已经安装。
如果你不想这样做,唯一的选择就是将这个库和你的应用程序一起打包。
顺便说一下,我认为 easy_install
在进行全系统安装时并不会真的检查你是否是管理员。它只是检查是否可以在系统目录中写入。因此,如果你有权限写入那里,其实就不需要使用 sudo
。不过,这样的情况确实有点奇怪……