如何在不使用 sudo 的情况下安装 virtualenv?
Posted
技术标签:
【中文标题】如何在不使用 sudo 的情况下安装 virtualenv?【英文标题】:How to install virtualenv without using sudo? 【发布时间】:2012-03-10 01:40:40 【问题描述】:我有easy_install
和pip
。
我的 Linux Mint 12 出现了很多错误,我刚刚重新安装了它,我想重新从头开始安装所有内容。
This 是我遇到的错误之一。我在那里收到了一个有趣的答案:
停止使用 su 和 sudo 运行 virtualenv。 您需要以普通用户身份运行 virtualenv。 您已经使用 sudo 创建了 virtualenv,这就是您收到这些错误的原因。
那么如何在不使用sudo
的情况下安装virtualenv
?我可以使用pip
或easy_install
而不使用sudo
吗?还是有别的办法?
【问题讨论】:
请注意,当它显示su
和sudo
时,它的实际含义是as root
。您正在以 root 身份运行 virtualenv
,而 virtualenv
不想以 root 身份运行。放弃权限,然后重试。
以 root 身份安装 virtualenv
与以 root 身份运行 之间存在很大差异。您插入的引用不是在谈论安装virtualenv
,而是使用它为 Python 项目设置虚拟环境。
【参考方案1】:
此解决方案适用于系统范围内没有可用的virtualenv
并且您无法成为root 来安装virtualenv
的情况。当我为 python 开发或部署设置 debian 时,我总是apt-get install python-virtualenv
。拥有它比执行下面指出的引导程序更方便。但如果没有根权,这可能是要走的路:
有一个引导机制可以帮助你前进。
阅读:http://peak.telecommunity.com/DevCenter/EasyInstall#creating-a-virtual-python
本质上,您可以在 unix 环境中的主目录中执行此操作:
鉴于您的 python 是 2.6 版
$ mkdir ~/bin $ mkdir -p ~/lib/python2.6 $ mkdir -p ~/local/lib/python2.6/dist-packages $ wget http://peak.telecommunity.com/dist/virtual-python.py $ python virtual-python.py --no-site-packages $ wget http://peak.telecommunity.com/dist/ez_setup.py $ ~/bin/python ez_setup.py $ ~/local/bin/easy_install virtualenv $ ~/local/bin/virtualenv --no-site-packages thereyouare可能还有优化空间。我不喜欢local
路径。只要bin
和lib
就好了。但它确实发挥了作用。
【讨论】:
非常感谢您的解决方案!使用python virtual-python.py --no-site-packages --prefix=`pwd`
,我们可以将virtual-python
安装到主文件夹以外的文件夹中,防止目录污染。
使用 -p 开关,您只需要第三行...递归目录创建就会发生。
也许这对旧版本的 virtualenv 有效。现在,如果你想在不是 root 的机器上运行 virtualenv:下载并解压一个,如果是:https://github.com/pypa/virtualenv/releases
,然后运行 python virtualenv.py /path/to/new/virtualenv/to/create
【参考方案2】:
一般的想法是全局安装virtualenv
本身,即sudo easy_install virtualenv
或sudo pip install virtualenv
,然后在本地创建实际的虚拟环境(“运行virtualenv”)。
【讨论】:
// ,但问题是,如何。许多 virtualenv 包,尤其是 CEntOS 6,一旦安装就需要 sudo。【参考方案3】:您也可以使用下面的命令,它对我没有sudo
访问权限。
您可能还需要使用export
、see this SO answer for more details 修改您的PYTHONPATH
环境变量。
pip install --user virtualenv
【讨论】:
【参考方案4】:http://opensourcehacker.com/2012/09/16/recommended-way-for-sudo-free-installation-of-python-software-with-virtualenv/ 建议如下:
curl -L -o virtualenv.py https://raw.githubusercontent.com/pypa/virtualenv/master/virtualenv.py
python virtualenv.py vvv-venv
. vvv-venv/bin/activate
pip install vvv
它似乎运作良好。它让我可以用pip
安装https://github.com/miohtama/vvv。
如果你得到:
Cannot find sdist setuptools-*.tar.gz
Cannot find sdist pip-*.tar.gz
在https://github.com/pypa/virtualenv/tree/develop/virtualenv_support下载压缩包后尝试--extra-search-dir
【讨论】:
【参考方案5】:This 为我工作:
pip install --target=$HOME/virtualenv/ virtualenv
cd somewhere/
python $HOME/virtualenv/virtualenv.py env
. env/bin/activate
现在我可以pip install
任何我想要的东西(除了需要用 gcc 编译东西并且缺少依赖项,例如 python 开发库和Python.h
)。
【讨论】:
【参考方案6】:我创建了一个“便携式”version of virtualenv。
wget https://bitbucket.org/techtonik/locally/raw/tip/06.get-virtualenv.py
python 06.get-virtualenv.py
它将带有依赖关系的virtualenv.py
脚本下载到.locally
子目录并从那里执行它。完成后,可以将带有 .locally/ 子目录的脚本复制到任何地方。
【讨论】:
使用你的解决方案我得到这个错误:Checking hash/size for /files/spegni/.locally/virtualenv.py Traceback (most recent call last): File "06.get-virtualenv.py", line 163, in <module> getsecure(LOOT, filespec) File "06.get-virtualenv.py", line 132, in getsecure check(filepath, entry['hashsize'], quiet) File "06.get-virtualenv.py", line 113, in check % (filepath, shize, hashsize(filepath))) __main__.HashSizeCheckFailed: Hash/Size mismatch for /files/spegni/.locally/virtualenv.py exp: a506a836ef76301bc19e5a209984a4286529a79b 98477 act: d205cbd6783332a212c5ae92d73c77178c2d2f28 9
@FSp,pypa 团队杀死了 1.11.x 版本的分支。固定的。立即尝试。
更新到 virtualenv 12.0.7【参考方案7】:
到目前为止,我看到的最简单的方法是安装 Anaconda。 这对你来说可能是多余的。对我来说,远程服务器上运行的 centOS 只安装了 python2.6。 Anaconda 默认在本地安装所有内容 + 它是 python2.7
curl -O https://repo.continuum.io/archive/Anaconda2-4.2.0-Linux-x86_64.sh
然后
bash Anaconda2-4.2.0-Linux-x86_64.sh
轰隆隆。你已经安装了所有的包,比如 numpy 和 pip。 然后如果你想要 virtualenv,只需输入
pip install virtualenv
【讨论】:
这不能回答 OP 的问题。他已经有 pip 并且想在不执行 sudo 的情况下安装 virtualenv。 @Ghazi 问题是:“我想再次从头开始安装所有东西”。同样,即使它不能准确回答 OP 的问题,其他人也会发现它和我一样有用。 什么是“一切”? Anaconda 就是你的一切? 除非 OP 澄清它,否则它可以解释。我理解这类似于我的情况,他可以访问远程服务器,因此他无权访问 root 权限。所以他想安装virtualenv。我认为安装 anaconda 是解决这个问题的最简单方法。他不需要 sudo 特权就可以做到这一点。此外,他预先捆绑了所有的 python 包。 好的。很公平。您的答案刚刚出现在审核队列中以进行质量检查。【参考方案8】:基本上这个想法是将virtualenv(或任何其他python包)安装到$HOME/.local
中。这是最合适的位置,因为它默认包含在 python 路径中(不仅是 Python)。
您通过pip3 install virtualenv --prefix=$HOME/.local
执行的操作(您可能需要扩展$HOME
)。
确保您的~/.profile
中有export PATH=$HOME/.local/bin:$PATH
(如果刚刚添加,您可能需要source ~/.profile
)
【讨论】:
【参考方案9】:您可能需要考虑使用Anaconda。它是一个成熟的 Python 发行版,位于一个文件夹中,例如你的主目录。在任何时候都不需要sudo
,您可以获得大多数流行的软件包。
$ wget https://.../Anaconda2-2.5.0-Linux-x86_64.sh # check the website for the exact URL, it can change
$ bash Anaconda2-2.5.0-Linux-x86_64.sh
$ conda install virtualenv
【讨论】:
【参考方案10】:我解决了为每个用户安装 virtualenv 的问题。
python3 -m pip install --user virtualenv
【讨论】:
【参考方案11】:sudo virtualenv -p python myenv1
sudo su
source myenv1/bin/activate
pip install mypackage
这将安装在虚拟环境中
【讨论】:
以上是关于如何在不使用 sudo 的情况下安装 virtualenv?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 sudo 的情况下从终端窗口关闭 Internet 连接?
如何在不覆盖 TTY 的情况下将密码传递给 su/sudo/ssh?
在不使用 sudo 的情况下更改 root 用户拥有的文件的权限