Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
系统python比virtualenv慢得多_Python_Linux_Performance_Virtualenv - Fatal编程技术网

系统python比virtualenv慢得多

系统python比virtualenv慢得多,python,linux,performance,virtualenv,Python,Linux,Performance,Virtualenv,当通过系统python与virtualenv运行时,某些python应用程序需要更长的启动时间 我通过创建一个干净的virtualenv,并从中安装+运行应用程序(如khal和todoman)来测试这一点。从virtualenv运行大约需要200毫秒,但从系统python(通过我的包管理器安装)运行大约需要1秒 我想这可能是我的特例,但我看到其他用户在这两个应用程序中都报告了同样的问题 在运行系统python时,我尝试使用cProfile,但它报告说只花了0.2秒——其他0.8秒似乎是pytho

当通过系统python与virtualenv运行时,某些python应用程序需要更长的启动时间

我通过创建一个干净的virtualenv,并从中安装+运行应用程序(如
khal
todoman
)来测试这一点。从virtualenv运行大约需要200毫秒,但从系统python(通过我的包管理器安装)运行大约需要1秒

我想这可能是我的特例,但我看到其他用户在这两个应用程序中都报告了同样的问题

在运行系统python时,我尝试使用
cProfile
,但它报告说只花了0.2秒——其他0.8秒似乎是python的启动时间,而不是通过
cProfile
(实际上是一个python模块)来衡量的


我还尝试过为更简单、非常基本的脚本(即:只打印“hello”)测量时间,但这不适用;它们在系统python和virtualenv中都以0.1s的速度运行。

这可能与导入模块在导入时执行繁重的工作有关。如果这些模块是有条件地导入的(即,仅在可用时使用),那么系统Python中的大量模块与使用
创建的virtualenv中的缩减集(没有站点包
可能是造成差异的原因)。我还注意到
khal
todoman
应用程序似乎都使用了。例如,当我看一看时,似乎大量使用了装饰器,这将在导入时进行评估。在该模块中,我还发现至少有两个
try..s(,)在导入时可能导致不同的代码路径。为了确认/拒绝我关于模块导入的预感,您可以尝试清理系统Python的
站点包。备份其原始状态,然后将所有包移出到临时位置。调用
todoman
。首先,您将得到由于缺少必需的依赖项而导致的导入错误。把它们移回原位。如果我的直觉是正确的,那么在这一点上,您应该会看到与在VirtualNV中调用时类似的计时。然后,您可以开始以二进制搜索方式将包组移回原位,以追踪罪魁祸首。我创建的virtualenv具有ToDomain及其所有依赖项,因此导入的模块应该是相同的(无论条件导入如何)。decorator应该是不相关的,因为virtualenv python应该和系统python一样慢。我尝试在安装了所有系统包的情况下创建一个virtualenv(除了pygobject,它不能安装在virtualenvs中,但在这里是不相关的),结果是一样的:virtualenv是200ms,系统是1s。这基本上是“删除系统<代码>站点包”测试的镜像(但该测试实际上会破坏我的系统)。很可能这与导入模块在导入时执行繁重的工作有关。如果这些模块是有条件地导入的(即,仅在可用时使用),那么系统Python中的大量模块与使用
创建的virtualenv中的缩减集(没有站点包
可能是造成差异的原因)。我还注意到
khal
todoman
应用程序似乎都使用了。例如,当我看一看时,似乎大量使用了装饰器,这将在导入时进行评估。在该模块中,我还发现至少有两个
try..s(,)在导入时可能导致不同的代码路径。为了确认/拒绝我关于模块导入的预感,您可以尝试清理系统Python的
站点包。备份其原始状态,然后将所有包移出到临时位置。调用
todoman
。首先,您将得到由于缺少必需的依赖项而导致的导入错误。把它们移回原位。如果我的直觉是正确的,那么在这一点上,您应该会看到与在VirtualNV中调用时类似的计时。然后,您可以开始以二进制搜索方式将包组移回原位,以追踪罪魁祸首。我创建的virtualenv具有ToDomain及其所有依赖项,因此导入的模块应该是相同的(无论条件导入如何)。decorator应该是不相关的,因为virtualenv python应该和系统python一样慢。我尝试在安装了所有系统包的情况下创建一个virtualenv(除了pygobject,它不能安装在virtualenvs中,但在这里是不相关的),结果是一样的:virtualenv是200ms,系统是1s。这基本上是“删除系统<代码>站点包”测试的镜像(但该测试实际上会破坏我的系统)。