我在 PythonAnywhere 的 virtualenv 中有一个在 Python 2.7.3 上运行的 Django (1.5.1) 站 pip 。据我所知,过去一切正常。最近,虽然除了一些 Django 代码之外我没有改变任何东西,但当我运行 pip 时我收到以下消息:

(venv)11:34 ~ $ pip
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Traceback (most recent call last):
  File "/*~*//venv/bin/pip", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/*~*//venv/lib/python2.7/site-packages/distribute-0.6.34-py2.7.egg/pkg_resources.py", line 16, in <module>
    import sys, os, zipimport, time, re, imp, types
ImportError: No module named time

不用说,pip 在产生上述错误后根本不起作用。

当我在激活 virtualenv 的情况下运行 python 时,我再次收到以下错误:
(venv)11:34 ~ $ python
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Python 2.7.3 (default, Apr 29 2013, 15:12:04)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last):
  File "/*~*//.pythonstartup.py", line 1, in <module>
    import rlcompleter
ImportError: No module named rlcompleter
>>>

但是,此后,Python 控制台似乎正常工作。

在没有激活 virtualenv 的情况下,python 运行良好,没有任何错误。

几周前我上次运行 pip 并安装了一些软件包时一切都很好,但是现在 pip 无法正常工作,尽管我的 Django 站 pip 的所有功能都运行良好。我感谢任何可以让 pip 再次工作的想法。

最佳答案

如果找不到模块 time 肯定会发生一些可疑的事情-据我所知,该模块实际上是内置在 Python 二进制文件本身中的,所以它并不是说存在可能已被删除的 time.pytime.so 文件。看起来好像你的 virtualenv 中的 Python 不知何故损坏了,或者环境中有一些东西把它搞砸了。

设置一个可疑的 PYTHONHOME 变量会导致 Python 出现各种麻烦,因为它找不到必要的文件,但我认为在这种情况下是因为 virtualenv 已损坏。事实上,我自己只是在 PythonAnywhere 上尝试了一个旧的 virtualenv 并遇到了同样的问题。看起来 virtualenv 创建的符号链接(symbolic link)似乎由于升级而损坏,可能是最近从 Debian 升级到 Ubuntu。

如果可能的话,我会简单地重新创建一个新的 virtualenv 并从那里运行。原则上,您可以使用 pip 编写需求文件,以便您可以使用完全相同的代码版本创建新的 virtualenv,但问题是您无法运行 pip 来创建此文件 QED。可能有一种聪明的方法可以使用系统 Python 来运行 pip 并从您的 virtualenv 中获取依赖项,但这会很棘手 - 它并非旨在以这种方式工作。

或者,您可以联系 PA 开发人员 - 我知道一些用户在升级时确实遇到了他们的 virtualenv 问题,他们可能有可以解决问题的巧妙脚本。即使您只是构建一个新的 virtualenv 并使用它,我也会与他们联系并确保他们知道这个问题,以便他们了解它以备将来升级。

关于PythonAnywhere + virtualenv : "Could not find platform dependent libraries <exec_prefix>...",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17670107/

10-15 13:33