如何使用自定义构建Python创建virtualenv环境来解决此问题?

时间:2010-02-17 02:59:29

标签: python virtualenv

我需要在使用Python 2.3.4的Linux机器上运行一些代码 预装。我不是那台机器的sudoers列表,所以我 将Python 2.6.4构建到我的主目录中的(子目录)中。然后我 试图使用virtualenv(第一次),但得到了:

$ Python-2.6.4/python virtualenv/virtualenv.py ENV
New python executable in ENV/bin/python
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Installing setuptools.........
 Complete output from command /apps/users/dspitzer/ENV/bin/python -c "#!python
\"\"\"Bootstrap setuptoo...

" /apps/users/dspitzer/virtualen...6.egg:
 Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
'import site' failed; use -v for traceback
Traceback (most recent call last):
 File "<string>", line 67, in <module>
ImportError: No module named md5
----------------------------------------
...Installing setuptools...done.
Traceback (most recent call last):
 File "virtualenv/virtualenv.py", line 1488, in <module>
  main()
 File "virtualenv/virtualenv.py", line 529, in main
  use_distribute=options.use_distribute)
 File "virtualenv/virtualenv.py", line 619, in create_environment
  install_setuptools(py_executable, unzip=unzip_setuptools)
 File "virtualenv/virtualenv.py", line 361, in install_setuptools
  _install_req(py_executable, unzip)
 File "virtualenv/virtualenv.py", line 337, in _install_req
  cwd=cwd)
 File "virtualenv/virtualenv.py", line 590, in call_subprocess
  % (cmd_desc, proc.returncode))
OSError: Command /apps/users/dspitzer/ENV/bin/python -c "#!python
\"\"\"Bootstrap setuptoo...

" /apps/users/dspitzer/virtualen...6.egg failed with error code 1

我应该将PYTHONHOME设置为某个值吗? (我有意命名 我的ENV“ENV”缺少一个更好的名字。)

我不知道是否可以忽略这些错误,我尝试安装鼻子 (0.11.1)进入我的ENV:

$ cd nose-0.11.1/
$ ls
AUTHORS    doc/               lgpl.txt     nose.egg-info/  selftest.py*
bin/       examples/          MANIFEST.in  nosetests.1     setup.cfg
build/     functional_tests/  NEWS         PKG-INFO        setup.py
CHANGELOG  install-rpm.sh*    nose/        README.txt      unit_tests/
$ ~/ENV/bin/python setup.py install
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Traceback (most recent call last):
 File "setup.py", line 1, in <module>
  from nose import __version__ as VERSION
 File "/apps/users/dspitzer/nose-0.11.1/nose/__init__.py", line 1, in <module>
  from nose.core import collector, main, run, run_exit, runmodule
 File "/apps/users/dspitzer/nose-0.11.1/nose/core.py", line 3, in <module>
  from __future__ import generators
ImportError: No module named __future__

有什么建议吗?

5 个答案:

答案 0 :(得分:8)

你真的在你的自定义python构建上运行“make install”吗?通常你会想要做像

这样的事情
./configure --prefix=/path/to/installdir  (other options)
make
make install

注意前缀可以是您具有完全写入权限的任何目录,例如我经常在共享托管环境中使用$ HOME / apps。

然后运行/ path / to / installdir / bin / python,而不是构建目录中的那个。这应该创建正确的变量,然后你可以安装virtualenv。最好使用setup.py:

安装virtualenv
cd virtualenv_source_dir
/path/to/installdir/bin/python setup.py install

这可能需要先使用相同的方法安装setuptools。

最后:

# Just to be safe
export PATH="/path/to/installdir/bin:$PATH" 

virtualenv ~/ENV
~/ENV/bin/pip install somepackage # (and such)

答案 1 :(得分:2)

除了Crast建议确保您实际安装了自定义编译的Python之外,您还应该检查自定义Python是否可以实际找到它的库。这是您收到有关PYTHONHOME的消息的提示。导入错误建议您需要在.bashrc或相应的shell配置export PYTHONHOME=/path/to/python_installation中进行设置。

此外,当您试图告诉virtualenv使用非默认版本的python时,您需要使用-p,--python标志,例如,

virtualenv --python=/path/to/python_installation/bin/python myenv

另请参阅相关问题"Use different Python version with virtualenv"

答案 2 :(得分:1)

尝试在lib / python2.6中已经有easy_install的现有目录上安装时遇到了同样的错误。我不得不把lib64 / python2.6的链接放到lib / python2.6。

我并不是说我的解决方案是正确的解决方案,而是我指的是您可能会遇到此错误的另一个原因。

答案 3 :(得分:0)

现在,您可以使用Anaconda轻松安装Python作为无特权用户:http://continuum.io/downloads

这与此问题类似。在创建新环境的答案详细信息之后,您不需要使用virtual-env并避免偶尔出现问题:Installing Anaconda into a Virtual Environment

conda create -n myenv1 ipython scipy

答案 4 :(得分:0)

我没有足够的代表来添加这个作为对@Crast的回答的评论,这个问题是4岁,但这可能对某人有用。在Windows中,你必须走出 python.exe ,但似乎在Linux / OS X中你只是路径到该文件夹​​。例如:

<强>窗:

virtualenv -p <PATH TO YOUR DESIRED PYTHON.EXE> venv

在当前目录中的子文件夹“venv”中创建虚拟环境。