如何在没有pip或virtualenv的情况下安装Python包

2 投票
2 回答
16375 浏览
提问于 2025-04-18 10:05

我需要把一个Python应用程序部署到一个我无法控制的生产服务器上(Ubuntu),而且我没有权限使用apt-getpipvirtualenv等工具。目前,这个服务器上运行的是Python 2.6以上的版本。我需要安装pycrypto作为这个应用的依赖,但由于我的权限有限,我不太确定该怎么做。我唯一能做的就是用wget下载资源,然后解压这些资源,或者做一些类似的事情。

首先,我想知道有没有可能在不安装的情况下使用它?如果不行的话,我能不能下载这个包,然后把__init__.py文件放到pycrypto目录里,这样Python就知道怎么找到它了,像这样:

/my_app
  /pycrypto
     /__init__.py
     /pycrypto.py

2 个回答

0

使用 easy_install。在Ubuntu上,Python 2.6及以上版本应该已经安装好了这个工具。如果没有的话,可以查看这些安装说明

4

根据 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。不过,这样的情况确实有点奇怪……

撰写回答