我知道有很多关于Django和虚拟环境的问题,但我不能把我的头围绕在通过uwsgi/nginx部署Django应用程序(本地)的虚拟环境的使用上。
我的设置包括一个虚拟环境(有Django和uwsgi),我的Django应用,nginx和PostgreSQL。应用是在虚拟环境之前创建的,我只对manage.py
做了一个修改:
#!/Users/snafu/virtualdjango/bin/python3
启动位于虚拟环境中的uwsgi时(使用适当的.ini
文件),一切马上就能正常工作,但我想知道为什么,我不需要摆弄$PYTHONPATH,或者将站点包目录附加到manage.py
中的系统路径,或者在任何时候激活虚拟环境(除了软件包的初始安装之外),尽管manage.py
中的样板注解明确提到不活动的虚拟环境可能是导入错误的原因。
1条答案
按热度按时间t30tvxxf1#
激活一个虚拟环境只不过是把虚拟环境的
bin/
前置到$PATH
,这样python
和pip
就没有了从虚拟环境运行的显式路径,其他与虚拟环境相关的一切都在Python内部实现--它会自动改变sys.path
和其他路径(sys.prefix
,sys.exec_prefix
等)。这意味着,当你从一个虚拟环境中使用绝对路径运行
python
时,Python会自动为这个特定的Python会话激活虚拟环境,所以你不需要显式地激活虚拟环境。不过路上有一个小小的警告标志:要从未激活的虚拟环境运行任何Python脚本,必须将所有脚本的shebang设置为指向虚拟环境或使用
sys.executable
。不要使用显式python
,因为它可能是与$PATH
不同的Python。