为什么virtualenv没有创建DLLs文件夹?

Pio*_*ost 9 python windows dll pydev virtualenv

我想知道virtualenv创建DLLs文件夹的原因是什么,它创建Lib和创建文件夹的方式相同Scripts

当我遇到PyDev的以下问题时,问题就出现了;
我将我的一个virtualenvs设置为Python解释器,一切都没问题,只有一个例外.我一直收到有关select模块中所有导入的未解决导入的警告.这是因为select模块与大多数其他模块不同,仅存在于DLLs文件夹中.

Pio*_*ost 10

我对此主题进行了一些调查.我从techtonik的声明开始- 答案很简单 - 没有人实现它.然而,这又引出了另一个问题 - 为什么没人实施呢?我怀疑答案是因为它有效.这导致了另一个问题 - 为什么它有效?

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

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

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

在评论中,您说我想将Python模块的DLL与Python代码一起保存在虚拟环境中.只需将DLLs文件夹复制到virtualenv即可.这样做的原因是,sys.path在virtualenv的激活之后还包含了DLLsvirtualenv中文件夹的路径(尽管在创建virtualenv时没有创建这样的文件夹).此路径位于原始DLLs文件夹的路径之前,这意味着它首先被搜索,因此会覆盖原始DLLs文件夹.

我在Python的邮件列表发布了一个名为DLLs文件夹的问题.


ana*_*nik 6

答案很简单 - 没有人实现它.当我创建补丁以将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目录中的模块.