- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的系统上安装了 WSL,运行的是 Python 3.7.3,而主系统上的 Python 运行的是 3.7.4。两个系统都安装了 pip(或 pip3)以及 virtualenv 16.x.x 及更高版本。我的问题是,在 WSL 上使用 virtualenv env 会创建与 PowerShell 上不同的文件夹结构,但问题不在于不同的路径,而在于 lib 文件夹中创建的文件。
我尝试通过执行 pip3 uninstall virtualenv
在 WSL 上重新安装 virtualenv,但问题仍然存在。
/image/lplqz.jpg以下是 WSL 和 PowerShell 的图片。
如您所见,WSL 创建的文件大小为 0-1KB,Windows 无法识别,而 PowerShell 创建的文件功能齐全。
有人可以向我解释一下为什么会发生这种情况吗?谢谢。
最佳答案
在适用于 Linux 的 Windows 子系统中创建 virtualenv 将创建一个在 Linux 上运行的 virtualenv,而不是在 Windows 上运行。这就是为什么 Windows 无法识别 WSL 上的 virtualenv 创建的文件(并且 Powershell 上的 virtualenv 创建的文件将无法在 WSL 中使用)。
至于为什么 Windows virtualenv 中的文件如此之大,是因为它们更多是编译后的二进制文件和库文件,而不是脚本。
我的双引导机器上有两个 virtualenv,因此我们可以查看它们以进行等效比较。 (一个是Python 3.6,一个是Python3.7,但这并不是太重要。)
以下是 Windows virtualenv 的文件:
2315 activate*
1067 activate.bat*
1755 activate.ps1*
1517 ativate_this.py*
1159 activate.xsh*
603 deactivate.bat*
102783 easy_install-3.7.exe*
102783 easy_install.exe*
103281 f2py.exe*
102765 pip3.7.exe*
102765 pip3.exe*
102765 pip.exe*
3748368 python37.dll*
58896 python3.dll*
99856 python.exe*
98320 pythonw.exe*
102761 wheel.exe*
以下是 Linux virtualenv 的文件:
2219 activate
1438 activate.csh
3103 activate.fish
1751 activate.ps1
1517 activate_this.py
1160 activate.xsh
259 easy_install*
259 easy_install-3.6*
242 f2py*
242 f2py3*
242 f2py3.6*
150 get_env_details*
246 pip*
246 pip3*
246 pip3.6*
72 postactivate
74 postdeactivate
69 preactivate*
75 predeactivate
7 python -> python3*
4526456 python3*
7 python3.6 -> python3*
2348 python-config*
237 wheel*
正如您所注意到的,Linux virtualenv 的文件比 Windows 的文件小很多。这是正常现象,不是问题。
原因是 Linux virtualenv 中的文件更多是脚本,而不是二进制文件。脚本是包含将由解释器运行的代码的文件,而二进制文件是编译后的代码,可以直接运行(如 .exe
文件)或用作库(如 .exe)。 dll
文件)。
在 Windows virtualenv 上,activate
、activate.bat
、activate.ps1
。 activate_this.py
、activate.xsh
和 deactivate.bat
是脚本。您可以看到它们的大小范围为 0.6 到 2.3 kB,相当小。 easy_install-3.7.exe
、easy_install.exe
、f2py.exe
、pip3.7.exe
、pip3.exe
、pip.exe
、python.exe
、pythonw.exe
和 wheel.exe<另一方面,
都是二进制可执行文件。您可以看到它们的范围从 98 到 103 kB,这比脚本大得多。 python37.dll
和python3.dll
是库文件,也是编译好的二进制文件,但不能直接执行,而且也比较大。 python3.dll
比 python37.dll
小得多,因此 python3.dll
可能只是引用 python37.dll
,但即便如此,与脚本相比,python3.dll
仍然非常大。
另一方面,在 Linux virtualenv 上,除了 python
、python3
和 python3.6
之外,所有文件都是脚本。 python3
是一个二进制可执行文件,python
和 python3.6
只是 python3
的符号链接(symbolic link)。
脚本通常较小的原因是它们运行实际上在解释器中的代码,而不在文件本身中包含该代码。作为示例,让我们看一下 pip
。
以下是 Linux virtualenv 上的文件 pip
的内容:
#!/home/nog642/.virtualenvs/virtualenv-name/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())
这是一个 python 脚本,在 virtualenv 的 python 解释器中运行。它导入 pip 模块,该模块包含在 virtualenv 结构的其他位置,然后在对命令行参数进行一些解析后运行 main 方法。
pip 的实际代码在其他地方,实际运行的可执行文件是 python3,然后它在解释器中运行此脚本。这就是文件最终只有 246 字节的原因。
另一方面,Windows virtualenv 中的pip.exe
为 102,765 字节。这是因为它本身是可执行二进制文件,而不是脚本。它包含运行所需的所有代码,并且已编译。由于它是独立的,并且不依赖于文件结构中其他位置的代码,因此它最终会变得更大。
关于python - WSL 上的 Virtualenv 创建的文件与 PowerShell 上的 Virtualenv 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58460221/
我正在寻找实现 PowerShell 提供程序 在 电源外壳。 我一直在想,如果我只是定义类型,然后将它们导入我的 session (导入模块),我应该能够让它们可用。 例如,这个 不工作但它沿着我想
我创建的脚本使用了组件,这些组件仅在32位版本的Powershell中可用。 默认情况下,Windows使用Powershell x64执行脚本,这会导致一些错误。 是一种在脚本开头设置值以强制Win
是否可以从 Powershell 中检测它是否是嵌套 shell? 如果我打开 Powershell 或 cmd.exe 窗口,然后输入 powershell 在那里,是否有一个神奇的 $host.s
随着 PowerShell Core 的发布,应用程序在使用托管自动化库 (system.management.automation) 时如何选择调用哪个版本的 Powershell(Powershe
最近,我加入了我企业的 Windows 团队,凭借我的开发人员背景(一般是 Java、.NET 和 Web),我很快就对 PowerShell 产生了兴趣。我可以看到它比普通的旧批处理文件、VB 更有
假设我有一个 powershell 脚本,它在我当前路径的相对路径中包含一个 Powershell 哈希。让我们称之为“name.ps1”,它包含: $names = @{ "bob" = "b
我想为我正在构建的自定义 Powershell Commandlet 使用 SqlServerCmdletSnapin。如果我将以下代码添加到 PSM1 的开头: if ( (Get-PSSnapin
如何调用从 PowerShell 脚本中获取命名参数的 PowerShell 脚本? foo.ps1: param( [Parameter(Mandatory=$true)][String]$a=''
我即将为 Windows 管理员编写一个 PowerShell 脚本,以帮助他们完成与部署 Web 应用程序相关的某些任务。 有什么理由让我应该赞成或排除开发 PowerShell 模块 (.psm1
我的 powershell 模块有一个函数,我希望它返回一个非零退出代码。但是,作为一个模块函数,当我运行 Import-Module 时,它会加载到 powershell 控制台的上下文中。所以,当
我在这个问题上花了最后 4 个小时,非常感谢您提供的任何意见。 我需要使用不同的凭据调用 powershell 脚本并将参数传递给该脚本。 安装 WISEScript 中包装的程序后,此脚本开始收集机
我有一个场景,我需要将 powershell 命令的命令和输出转发到另一个进程以进行日志记录和处理。 我希望这个控制台尽可能接近 powershell,因此不希望将它简单地托管在另一个控制台程序中。
我正在尝试让一个主 PowerShell 脚本运行所有其他脚本,同时等待 30-60 秒以确保完成任务。我尝试过的所有其他操作都不会停止/等待第一个脚本及其进程完成,然后才能同时完成所有其他脚本,并且
我正在编写一个脚本来使用多个 plink (PuTTY) session 作为 Windows 版本的 clustersh。然而,我陷入困境,因为我想从 powershell 打开多个 Powersh
我读了这个答案:How to Open Powershell from Powershell start powershell 这将打开基础的大分辨率 PS 实例。如何打开 PS(x86)? 最佳答案
我很想知道我们是否可以在 Powershell 中做到这一点。 使用 Out-File 命令,我们可以通过管道将其输出写入文件。这样我就可以将我所有的历史命令发送到一个文本文件中。 问题是我可以在每次
我在 about_Pipelines 阅读了有关 PowerShell 中的管道工作原理的信息,并了解到管道一次传送一个对象。 所以,这个 Get-Service | Format-Table -Pr
我正在尝试像这样从 powershell 启动一个进程:- $proc = (start-process $myExe -argumentList '/myArg True' -windowStyle
## To run the script # .\get_status.ps1 -Hostname -Service_Action -Service_Name #$Hostname = "hos
让我们使用 powershell 命令 Write-Host "red text"-Fore red这会在红色前景中显示“红色文本”。 但是,您希望文本以稍微亮一点的方式显示字体颜色,浅红色。 有没有
我是一名优秀的程序员,十分优秀!