擅长:python、mysql、java
<p>我发现了这种行为的原因。PYTHONPATH环境变量被设置为在计算机上不寻常的位置安装的Python。在</p>
<p>根据<a href="https://docs.python.org/2/tutorial/modules.html#the-module-search-path" rel="nofollow">the documentation</a>,当当前目录中找不到模块时,PYTHONPATH将用作导入位置。在</p>
<blockquote>
<p>When a module named spam is imported, the interpreter first searches for a built-in module with that name. If not found, it then searches for a file named spam.py in a list of directories given by the variable sys.path. sys.path is initialized from these locations:</p>
<ul>
<li>the directory containing the input script (or the current directory).</li>
<li>PYTHONPATH (a list of directory names, with the same syntax as the shell variable PATH).</li>
<li>the installation-dependent default.</li>
</ul>
</blockquote>
<p>由于某些原因,PYTHONPATH不是由activate/deactivate脚本设置/取消设置的。它确实设置了PYTHONHOME,但这似乎不影响进口。这感觉像是virtualenv和pyvenv中的bug(我都试过了)。在</p>
<p>原来的激活.bat脚本更改“set”变量,这不会影响$环境:Python。激活.ps1尝试将原始PYTHONPATH保存在变量中,将其设置为虚拟环境目录,然后在停用时恢复原始PYTHONPATH。这两种方法都不起作用了,可能是因为Powershell或Python更新。在</p>
<p>我们的解决方案是修改activate和deactivate脚本(PoSh或bat),以便在两个硬编码值之间切换PYTHONPATH。在</p>