虚拟环境和嵌入Python

时间:2012-01-25 05:59:04

标签: python embed virtualenv

我非常喜欢Python的virtualenv,这有助于维护单独的Python配置。我正在考虑将Python嵌入到C ++应用程序中,并且想知道嵌入式Python在虚拟环境方面的表现如何。

特别是,我有兴趣知道是否可以根据某些用户定义的设置“选择”虚拟环境(例如,通过在配置文件中命名感兴趣的虚拟环境)。

2 个答案:

答案 0 :(得分:4)

virtualenv文档包含一个Using virtualenv without bin/python部分,提示在解释器运行后如何配置虚拟环境。

为避免硬编码activate_this.py脚本的路径,我使用以下代码段:

def resolve_virtual_environment(override=None):
    """Fetch the virtual environment path in the
       process' environment or use an override."""
    path = os.getenv('VIRTUAL_ENV')
    if override:
        path = os.path.join(os.getcwd(), override)
    return path

def activate_virtual_environment(environment_root):
    """Configures the virtual environment starting at ``environment_root``."""
    activate_script = os.path.join(
        environment_root, 'Scripts', 'activate_this.py')
    execfile(activate_script, {'__file__': activate_script})

你可以像这样使用它:

if __name__ == '__main__':
    # use first argument is provided.
    override = None
    if len(sys.argv) > 1:
        override = sys.argv[1]
    environment_root = resolve_virtual_environment(override)

您可以从配置文件中获取override值,而不是从命令行参数中获取。

请注意,您仍然只能使用单个虚拟环境预处理。

注意:与使用虚拟环境中捆绑的解释器相比,您可以访问为您启动的解释器安装的软件包。例如,使用全局安装的Python时,您将可以访问全局安装的软件包。

还要确保使用Python解释器,其版本与您用于创建虚拟环境的任何版本相匹配,以确保标准库(复制到虚拟环境)版本与Python解释器版本匹配。

答案 1 :(得分:1)

是的,当然。这只是你将PYTHONPATH设置为(或编译的内容)的问题。

确保查看pythonqt(不要被误认为是PySide或PyQt ..反过来,将Python构建到Qt C ++应用程序中。