我想知道是什么原因virtualenv不创buildDLLs
文件夹相同的方式创buildLib
和Scripts
的?
当我遇到以下PyDev问题时,问题就来了。
我将其中一个virtualenvs设置为Python解释器,除了一个例外,一切正常。 我不断收到有关从select
模块导入的所有导入未解决的警告。 这是因为select
模块,不像大多数其他模块,只存在于DLL文件夹中。
我调查了这个问题多一点。 我从techtonik的声明开始 – 答案很简单 – 没有人实现它。 然而,这引发了另一个问题 – 为什么没有人实现它? 我怀疑答案是因为它的工作原理。 这导致了另外一个问题 – 为什么它工作?
没有DLLs
文件夹被复制到virtualenv的一切工作的原因是
sys.path
来找到它需要的任何DLL 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目录中的模块。
国际海事组织有更多的理由:
HTH,