Python,virtualenv:激活时获取权限错误

时间:2014-07-15 09:54:36

标签: python virtualenv

我有一台笔记本电脑。所以我从我的Work PC .virtualenvs/目录复制到我的NAS,然后将其复制回我的新笔记本电脑。

我安装了virtualenvvirtualenvwrapper,但我无法让我的虚拟环境正常工作。这就是我最初得到的:

chris@chris-amilo ~ $ workon iwidget
virtualenvwrapper.user_scripts could not run "/home/chris/.virtualenvs/preactivate": [Errno 13] Permission denied
virtualenvwrapper.user_scripts could not run "/home/chris/.virtualenvs/iwidget/bin/preactivate": [Errno 13] Permission denied

然后我对那些文件做了一个chmod + x。虽然我之后可以改变这种环境,但是看不到图书馆。

我也明白了:

chris@chris-amilo ~ $ ./.virtualenvs/iwidget/bin/activate
bash: ./.virtualenvs/iwidget/bin/activate: Permission denied

此外,以下显示虽然我可以workon某些env,但是没有任何内容可以导入:(在我执行chmod + x以预先激活文件之后)

chris@chris-amilo ~ $ workon iwidget
(iwidget)chris@chris-amilo ~ $ python 
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pytz
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named pytz
>>> 
(iwidget)chris@chris-amilo ~ $ ls .virtualenvs/iwidget/lib/python2.7/site-packages/py
py4j/                               pytz/
py4j-0.8.1-py2.7.egg-info/          pytz-2014.2-py2.7.egg-info/
python_dateutil-2.2-py2.7.egg-info/ 

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

移动virtualenvs很棘手。在新机器上从头开始重建它们是一个更好的选择。如果您使用的是需求文件,则这很简单:只需pip install -r requirements.txt即可。如果您没有使用,请使用pip freeze > requirements.txt在旧计算机上创建。

答案 1 :(得分:1)

如错误所示,您对这些脚本没有执行(运行)权限。我遇到了类似的问题,但只针对.virtualenvs / preactivate文件。

chmod u+x ~/.virtualenvs/*

为我做了诀窍,但我看到你的回答中也注意到了。它可能与从不同的机器迁移你的virtualenvs有关吗?

您可能需要为〜/ .virtualenvs / iwidget / bin / *

做同样的事情

使用virtualenvwrapper,您不需要在文件夹本身中使用activate脚本,但是如果您想这样做,则必须像这样调用命令:

. .virtualenvs/iwidget/bin/activate

注意前面的点?那个点实际上是一个命令,尽管很容易被忽视,它用于激活env;激活脚本不能自己运行,因为文件的前两行会告诉你。命令source是点的别名。

但是workon iwidget应该照顾所有的爵士乐。

至于导入问题,您可能希望在尝试导入之前在env中运行pip install pytz。要查看它是否在您的环境中,请输入:pip freeze|grep pytz

答案 2 :(得分:0)

从项目中输入以下命令: your_project$:source env/bin/activate

此处env是您的virtualenv目录,将在此命令后创建:$:virtualenv env

运行第一个命令后,您会看到:(env)user@localhost:~/path_to_your_project$

完成。