我已经安装了 IronPython 3.4 (https://github.com/IronLanguages/ironpython3/releases/tag/v3.4.1),并且我正在尝试运行几个依赖于活动 VENV 的与字体相关的 python 脚本( FontTools、ftCLI 和其他一些软件包)。
这可能吗?我一直在对 IronPython 进行一些研究,但没有提到虚拟环境。
可以实现我所需要的吗?是否有另一种解决方案可以使用 C# 在活动 VENV 中运行脚本?
谢谢您的指导。
总而言之,您需要传递Python
venv
版本的完整路径。
A
venv
包括:
/home/bob/dev/project/.venv
或 C:/Users/Bob/dev/project/.venv
包含构成 venv
的事物。
bin
)activate
的脚本,它会修改当前 shell 的环境,以便首先调用这些脚本,这样 Python 就会首先查看 site-packages
。如果从 shell(例如 Bash、Zsh、Powershell 或 Cmd)调用,
activate
脚本将修改 shell 的环境,因此当您键入 python
时,python 的版本是 venv
python。您可以使用 call .venv/Scripts/activate.cmd
(对于 Windows)或 source .venv/bin/activate
(对于 Linux)来“激活”venv。
但是,如果您只是想确保 python 模块或文件在
venv
中运行,您所要做的就是指定 venv
python 存根的完整路径。
例如在 Windows 上:
var psi = new System.Diagnostics.ProcessStartInfo(
@"C:\Users\Bob\dev\project\.venv\Scripts\Python.exe"
){
ArgumentList = {
"-m",
"@C:\Users\Bob\dev\project\main_module.py" // add other arguments as needed
}
}
proc = Process.Start(psi);
那么这是如何运作的?
.exe
中的.venv\Scripts
文件是小型可执行文件,它们检查自己的名称和目录以发现正确的 venv 位置和 python 版本。然后他们在正确的环境下启动真正的 Python、Pip 等。
Linux等上的情况非常相似,只是目录的命名不同,例如
.venv/bin
而不是.venv/scripts
。