2012-03-28 71 views
0

我想在我的virtualenv运行以下脚本:virtualenv错误?

(python2.7.2-gonvaled1)[email protected]:~/.virtualenvs/python2.7.2-gonvaled1$ couchy.py 
Traceback (most recent call last): 
    File "/home/gonvaled/projects/bin/couchy.py", line 46, in <module> 
    from couchdb_support   import CouchdbLists 
    File "/home/gonvaled/projects/test_project/python_modules/couchdb_support.py", line 3615, in <module> 
    from asterisk_support   import AsteriskSupport 
    File "/home/gonvaled/projects/test_project/python_modules/asterisk_support.py", line 4, in <module> 
    from starpy_support     import AmiCommand 
    File "/home/gonvaled/projects/test_project/python_modules/starpy_support.py", line 7, in <module> 
    from starpy     import manager, fastagi, utilapplication, menu 
    File "/usr/lib/python2.5/site-packages/starpy/utilapplication.py", line 2, in <module> 
    from basicproperty import common, propertied, basic, weak 
    File "/usr/lib/python2.5/site-packages/basicproperty-0.6.12a-py2.5-linux-i686.egg/basicproperty/common.py", line 159, in <module> 
    from basictypes import datedatetime_types as ddt 
    File "/usr/lib/python2.5/site-packages/basicproperty-0.6.12a-py2.5-linux-i686.egg/basictypes/datedatetime_types.py", line 4, in <module> 
    from dateutil import parser 
    File "/usr/lib/python2.5/site-packages/python_dateutil-2.1-py2.5.egg/dateutil/parser.py", line 8 
    from __future__ import unicode_literals 
SyntaxError: future feature unicode_literals is not defined 

所以不知何故蟒蛇正试图从导入:

/usr/lib/python2.5/site-packages/starpy/utilapplication.py 

这没有任何意义。我的virtualenv很干净:

(python2.7.2-gonvaled1)[email protected]:~/.virtualenvs/python2.7.2-gonvaled1$ python 
Python 2.7.2 (default, Mar 29 2012, 00:31:29) 
[GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu4)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.path 
['', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1/lib/python2.7/site-packages/pip-1.1-py2.7.egg', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1/lib/python2.7/site-packages/Twisted-12.0.0-py2.7-linux-i686.egg', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1/lib/python2.7/site-packages/zope.interface-3.8.0-py2.7-linux-i686.egg', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1/lib/python2.7/site-packages/basicproperty-0.6.12a-py2.7-linux-i686.egg', '/home/gonvaled/projects/gonvaled_settings', '/home/gonvaled/django_apps', '/home/gonvaled/projects/test_project/ipc', '/home/gonvaled/projects/test_project/python_modules', '/home/gonvaled/projects/test_project/gdata', '/home/gonvaled/projects/callisto/libraries', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1/lib/python27.zip', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1/lib/python2.7', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1/lib/python2.7/plat-linux2', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1/lib/python2.7/lib-tk', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1/lib/python2.7/lib-old', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1/lib/python2.7/lib-dynload', '/usr/local/python/2.7.2/lib/python2.7', '/usr/local/python/2.7.2/lib/python2.7/plat-linux2', '/usr/local/python/2.7.2/lib/python2.7/lib-tk', '/home/gonvaled/.virtualenvs/python2.7.2-gonvaled1/lib/python2.7/site-packages'] 

和:

(python2.7.2-gonvaled1)[email protected]:~/.virtualenvs/python2.7.2-gonvaled1$ pip freeze 
CouchDB==0.9dev 
DateUtils==0.5.1 
Twisted==12.0.0 
basicproperty==0.6.12a 
pystache==0.4.0 
python-dateutil==2.1 
pytz==2012b 
simplejson==2.4.0 
six==1.1.0 
starpy==1.0.0a12 
wsgiref==0.1.2 
zope.interface==3.8.0 

所以总结:Python是从/usr/lib/python2.5/site-packages进口,即使我是一个的virtualenv内。怎么会这样?

回答

2

尝试运行脚本:

$ python couch.py 
在你激活的virtualenv

。根据您的系统和文件的第一行(shebang行),您可能没有在您认为自己的Python中运行。

+0

谢谢,就是这样。我的shebang是'#!/ usr/bin/python'。我觉得有点讨厌,我不能自己运行我的Python脚本。这意味着,为了在虚拟环境中运行它们,我必须做一些与我在主机环境中做的不同的事情。它有效地杀死了shebang的概念,因为要做到这一点,我不能依赖它(认为控制脚本,cronjob等)。我试图把'#!python'放在shebang中,但显然绝对路径是必需的。 – dangonfast 2012-03-29 05:17:41

+1

使用'#!/ usr/bin/env python'的shebang行。这应该使用在当前'$ PATH'上找到的第一个'python',它应该是活动virtualenv中的一个。 – 2012-03-29 08:51:35

+0

这很有道理,谢谢。我会尽快尝试。 – dangonfast 2012-03-29 10:18:42

0

你应该使用--nositepackages选项创建你的virtualenv选项,以保持它的干净,远离你的系统Python。

+0

不,不,我已经说过我的virtualenv很干净。它实际上是使用'--nositepackages'创建的(顺便说一句,在virtualenv的最新版本中不再需要,因为它已经成为默认版本) – dangonfast 2012-03-29 05:19:11