如何在 C# 中使用 IronPython 来运行需要活动 VENV 的脚本?这可能吗?

问题描述 投票:0回答:1

我已经安装了 IronPython 3.4 (https://github.com/IronLanguages/ironpython3/releases/tag/v3.4.1),并且我正在尝试运行几个依赖于活动 VENV 的与字体相关的 python 脚本( FontTools、ftCLI 和其他一些软件包)。

这可能吗?我一直在对 IronPython 进行一些研究,但没有提到虚拟环境。

可以实现我所需要的吗?是否有另一种解决方案可以使用 C# 在活动 VENV 中运行脚本?

谢谢您的指导。

python c# ironpython
1个回答
0
投票

总而言之,您需要传递Python

venv
版本的完整路径。

A

venv
包括:

  • 一个目录,例如
    /home/bob/dev/project/.venv
    C:/Users/Bob/dev/project/.venv
    包含构成
    venv
    的事物。
    • 安装 python 模块的本地存储库
    • 脚本目录,用于启动 Python、Pip 等的存根(例如 Linux 的
      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

© www.soinside.com 2019 - 2024. All rights reserved.