在3.5.0版本中,Python.org引入了一个分发为 嵌入式zip文件的发行版.
不幸的是,压缩文件没有帮助文件(甚至没有自述文件).Python.org上的下载页面只是在下载中列出了它.
显然这是一个可移植的Python发行版.无论如何,它的结构和大小与使用安装程序的标准分发完全不同.
我意识到可以用get-pip.py安装pip,并且由于pip,添加许多其他应用程序包是轻而易举的,尽管我仍然无法添加Tkinter(根据你的shell调整斜杠):
curl https://www.python.org/ftp/python/3.x.x/python-3.x.x-embed-amd64.zip > epython.zip
unzip -o epython.zip -d env1
curl -L https://bootstrap.pypa.io/get-pip.py>env1/get-pip.py
env1/python env1/get-pip.py
Run Code Online (Sandbox Code Playgroud)
添加你需要的东西,例如django:
env1/python -m pip install django
Run Code Online (Sandbox Code Playgroud)
考虑到尺寸(3.5.1-x64的6.5兆),我认为它可以方便地创建隔离环境.
事实上,一般的Python 文档说明了这一点
嵌入式发行版(几乎)与用户系统完全隔离,包括环境变量,系统注册表设置和已安装的软件包
鉴于此,在Windows中,现在有两个独立的Python环境,第二个是标准的 Virtualenv.Virtualenv中的相同过程如下:
virtualenv env2
Run Code Online (Sandbox Code Playgroud)
对于django,它将是:
env2/Scripts/python -m pip install django
Run Code Online (Sandbox Code Playgroud)
比较的内容env1和env2,他们似乎有相同的文件.唯一显着的区别是Tkinter1,这对于桌面应用来说无论如何都不是很重要.
Python Virtualenv和Python嵌入式的区别是什么?
具体来说,使用embeddable zip(env1)和Virtualenv(env2)创建的隔离Web应用程序之间的区别是什么?
这是一个CPython程序,试图用空的初始化解释器sys.path:
#include <Python.h>
int main(int argc, char** argv)
{
wchar_t* program = NULL;
wchar_t* sys_path = NULL;
Py_NoSiteFlag = 1;
program = Py_DecodeLocale(argv[0], NULL);
Py_SetProgramName(program);
sys_path = Py_DecodeLocale("", NULL);
Py_SetPath(sys_path);
Py_Initialize();
PyMem_RawFree(program);
PyMem_RawFree(sys_path);
Py_Finalize();
}
Run Code Online (Sandbox Code Playgroud)
执行上述程序会引发以下错误:
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'
Current thread 0x00007ffff7fc6700 (most recent call first):
Signal: SIGABRT (Aborted)
Run Code Online (Sandbox Code Playgroud)
那么除了encodings包之外,Python 3.5标准库中的哪些包和模块是运行Python 3.5解释器所必需的?在我的文档中似乎没有这些信息.
python python-embedding python-3.x python-internals python-3.5