背景
- 今天在看胡阳大神写的《Django企业开发实战》这本书,在第五章第一小节拆分完setting后书里面就推荐使用git来管理项目了,于是我就跑到了gitee上新建了一个仓库并克隆到了本地,然后就顺手把原先的文件夹移动进了新的仓库文件夹中,层级如下:
.
└── django-enterprise
└── django-enterprise
└── typeidea
└── typeidea
├── blog
│ └── migrations
└── typeidea
├── __pycache__
└── settings
└── __pycache__
10 directories
原本django-enterprise这个文件夹只有一个,现在我把它挪到了第一级的django-enterprise的下面变成了第二级,而.venv
文件夹在第一级的typeidea的同级。
现象和解决办法
-
移动完了之后我就执行
source .venv/bin/activate
进入到了虚拟环境,接着运行python manage.py startapp blog
准备新建个django app,可是这个时候却报了下面的错误,
Traceback (most recent call last):
File "manage.py", line 19, in <module>
"Couldn't import Django. Are you sure it's installed and "
ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?
顿时我就傻眼了,心想这不是已经进入到了虚拟环境了么为啥还报错,心有不甘,又心想是不是没彻底进入虚拟环境,就又source了两遍,可是django这时还是报上面的错误,此外我还试过deactivate
退出虚拟环境重新进,这样子又试了两遍,结果可想而知还是不行。
于是这时我决定借助狗哥的力量,于是Google了一下move virtualenv to another directory
就在第一条结果的这个StackOverflow回答里面我找到了答案,原来`.venv/bin/activate`这个脚本中写死了,也叫作`hard code`了一个变量`VIRTUAL_ENV`,此时我们需要做的是用`vim`把这个变量的值改为你的`.venv`这个文件夹的实际的绝对路径,然后`deactivate`出去再重新source进来。
* 另外还有一个问题相信细心的你也一定会发现,那就是`pip list`命令会报下面的错误:
$ pip list
zsh: /home/sharp/Workplace/django/django-enterprise/django-enterprise/.venv/bin/pip: bad interpreter: /home/sharp/Workplace/django/django-enterprise/.venv/bin/python3: no such file or directory
这个问题呢解决起来其实也很简单,那就是用vim
打开这个pip文件,然后你会发现第一行python的shebang
声明竟然也是hard code的,那么此时只需要像上面一样改为实际的绝地路径就行了,另外你如果习惯用pip3
,那么就也打开修改一下。