为什么不virtualenv创buildDLL文件夹?

我想知道是什么原因virtualenv不创buildDLLs文件夹相同的方式创buildLibScripts的?

当我遇到以下PyDev问题时,问题就来了。
我将其中一个virtualenvs设置为Python解释器,除了一个例外,一切正常。 我不断收到有关从select模块导入的所有导入未解决的警告。 这是因为select模块,不像大多数其他模块,只存在于DLL文件夹中。

我调查了这个问题多一点。 我从techtonik的声明开始 – 答案很简单 – 没有人实现它。 然而,这引发了另一个问题 – 为什么没有人实现它? 我怀疑答案是因为它的工作原理。 这导致了另外一个问题 – 为什么它工作?

没有DLLs文件夹被复制到virtualenv的一切工作的原因是

  • Python搜索sys.path来找到它需要的任何DLL
  • virtualenv激活后的sys.path包含原始DLLs文件夹的路径

第一个语句可以通过从sys.path删除DLLs文件夹的路径来简单地测试,并尝试导入select模块(该模块需要DLLs文件夹中的select.pyd文件),然后失败。

在评论中你说我想把Python模块的DLL和Python代码放在​​虚拟环境中。 只需将DLLs文件夹复制到virtualenv即可。 这个工作的原因是virtualenv激活后的sys.path也包含了virtualenv中DLLs文件夹的路径(虽然在创建virtualenv时没有创建这样的文件夹)。 此路径被放置在原始DLLs文件夹的路径之前,这意味着它首先被搜索,从而覆盖原始DLLs文件夹。

我在Python的邮件列表上发布了标题为DLL的DLL文件夹 。

答案很简单 – 没有人实现它。 当我创建修补程序将pythonXX.dll复制到virtualenv环境 – 我正在解决一个不同的问题:

当系统安装Python时 – 复制到virtualenv的python.exe二进制文件总是能够找到它的pythonXX.dll,因为这个.dll可以从Windows \ System32下载。 如果仅为当前用户安装Python,则将pythonXX.dll放置到原始python.exe所在的PythonXX目录中。 所以我正在解决的问题是修复为当前用户安装的Python创建的virtualenvs。 挖掘所有这些东西是一个相当大的问题。

回到问题。 我真的不知道这个pythonXX.dll如何找到它的DLL模块 – 这是Python开发者的一个问题,但我怀疑它没有找到它们。 我在解决问题#87时没有解决这个问题的原因是我的代码可能从来没有使用过这个DLLs目录中的模块。

国际海事组织有更多的理由:

  • 安全性:在某些环境中,策略是拒绝从随机位置执行/加载东西,以防止安全漏洞。 从而,
  • 有点着名的DLL 加载 顺序 ,防止恶意DLL被加载:)。 另见这里

HTH,