【问题标题】:How to use a Python virtualenv in a .NET-project for processes?如何在 .NET 项目中使用 Python virtualenv 进行进程?
【发布时间】:2018-05-21 08:55:25
【问题描述】:

我正在使用 mvvm 模型中的剃须刀页面在 .net 中开发 Web 应用程序。我用 Python 编写了一个爬虫/解析器,我需要从我的 .NET 项目中控制它。所以我找到了另一个stackoverflow post 来帮助我解决这个问题。

为了保持我的 Python 环境整洁有序,我使用 virtualenv 将我的库(BeautifulSoup4Requests)与我的全局解释器分开。这一切都如我所愿。

但是,我已经到了需要连接两个应用程序的地步。所以我把解析器放在我的 .NET 项目中的一个单独的文件夹中。此外,每当我的表单经过验证等并到达我的OnPostAsync-method 时,它就会启动一个过程,就像上面提到的帖子描述的那样。

但是当我点击提交按钮时,我可以在控制台中看到它无法在我的 Python 应用程序中找到正确的包,因为我得到了著名的:ImportError: No module named 'bs4'我知道这个错误以前是已知的并且得到了广泛的回答,但我有一个不同的问题

问题

我想知道我如何解决我的 .NET 项目和 virualenv 的这个错误。那么,有没有办法在我的 .NET 项目中使用或从 Python 链接我的 virtualenv?

我的 Python 项目结构是:

/app/
  /src/    <-- Source code
  /output/ <-- Not relevant
  /tests/  <-- Not relevant
  /venv/   <-- Installed libraries
  main.py  <-- Entrypoint application

【问题讨论】:

  • I am aware this error is known and widely answered before 它在哪里回答?

标签: c# python process


【解决方案1】:

如果我很好地理解了您的问题,您可以通过修改脚本的第一行来指定将使用哪个 Python 解释器运行脚本,就像 Bash 所做的那样:

#!/path/to/venv/bin/python 

【讨论】:

  • 感谢您的回答。这可能是我需要的。我的解析器位于root/subdir/parser/run.py,所以我的virtualenv 位于root/subdir/parser/venv。但是,#!/subdir/parser/venv/bin/python 不起作用:(
【解决方案2】:

应该有一个文件/venv/Scripts/activate_this.py,其中包含在当前解释器中激活 venv 的代码。文件的文档字符串说

为当前解释器激活 virtualenv:

使用exec(open(this_file).read(), {'__file__': this_file}).

当您必须使用现有的 Python 解释器而不是 virtualenv bin/python 时,可以使用它。

我的源位于/venv/ 的父目录中,所以我使用以下命令来激活我的 virtualenv。

import os

venv_activation_path = os.path.join(
    os.path.dirname(os.path.abspath(__file__)), 'venv', 'Scripts', 'activate_this.py')
exec(open(venv_activation_path).read(), {'__file__': venv_activation_path})

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    相关资源
    最近更新 更多