从里面的virtualenv斌运行Python脚本不工作(Running python script

2019-06-27 01:46发布

我有一个脚本我想在全球上市。 我已经与标准hashbang开始吧:

#! /usr/bin/env python

并链接到我的virtualenv的bin目录:

~/environments/project/env/bin/myscript

并补充说,目录到我的路径。 当我运行以下命令:

myscript

我得到一个导入错误与图书馆之一。 但是,如果我激活虚拟环境,并运行该脚本,它按预期工作。

我已经排除了与符号链接(我也尝试了移动的bin文件夹中的脚本)的问题。 我也试着运行使用python脚本

python ~/environments/project/env/bin/myscript

以前我是用一个脚本,启动了环境,然后跑到我的剧本,但我的印象是,脚本从该文件夹运行应与virtualenv中的解释器和站点包中运行。 为什么这个任何想法可能无法正常工作或某些方面,我能调试吗?

Answer 1:

把脚本到你的virtualenv的垃圾桶,然后加入该仓位置,你的全局路径不会自动信号源您的virtualenv。 你需要第一来源它来激活它。

所有可以让系统知道是检查额外的路径为可执行文件并运行它。 有没有什么在脚本中指示的virtualenv。

你可以,但是,硬编码她邦线到你的virtualenv蟒蛇,在这种情况下,站点包最终会在路径上:

#!/Users/foo/environments/project/env/bin/python

或者另一种选择是简单地创建一个小的bash包装调用原始的蟒蛇脚本,它可以让你用一个通用的,她爆炸留下您的原始脚本..

所以,如果myscript.py是: #!/usr/bin/env python ...

然后你就可以做出myscript

#!/bin/bash

/Users/foo/environments/project/env/bin/python myscript.py

当你这样做myscript ,它会明确地设置了翻译打电话给你的Python脚本。



Answer 2:

我认为你是困惑,如何virtualenv中的作品。

简而言之,virtualenv中修改你的shell环境,使Python会看在不同的领域找到要导入的模块。 实在没有地方存储您的虚拟环境,并在那里你存储你的virtualenv中运行你的源文件之间的关系。 如果你愿意,你可以同时使用你的virtualenv在〜/项目/ my_proj你的virtualenv存储在一个叫做〜/环境/ my_env目录,所有的来源,你的代码。

您可以了解更多关于什么virtulenv做的文档。

真的,告诉蟒蛇在哪里可以找到这些模块的唯一的事情是完全基于Python的( 见文档上它是如何工作)。 激活的virtualenv改变了Python的工作方式。

你可以回去有一个shell脚本启动的virtualenv你,或者你可以按照这个食谱可以直接从你的脚本激活它。

activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

如果你选择这条路,保持信息的文档记给:

这将改变sys.path中,甚至改变sys.prefix,也让您使用现有的解释。 在你的环境的项目将首先出现在sys.path中,全球性项目前。 然而,全球性的项目将始终可以访问,(好像--system-site-packages中旗在创造环境,无论是还是没有被使用)。 而且,这不能复原已导入其他环境中,或模块的激活。 你不应该尝试,例如,激活一个web请求前的环境; 你应该尽可能早地激活一个环境,而不是在这个过程中做一遍。



Answer 3:

不能你只需要添加一个相对路径呢? 这为我工作:

#!./env/bin/python


Answer 4:

我面临着同样的问题,这种解决方案提出了: https://github.com/jabbalaci/wpython 。 这是一个名为“脚本wpython ”,随着你的VENV当地Python解释器调用你的程序。 因此,而不是“ /Users/foo/environments/project/env/bin/python myscript.py ”这足以写“ wpython /path/to/myscript.py ”。 启动器脚本可能是这样的:

#!/usr/bin/env bash

cd /the/directory/where/myscript.py/is/located
wpython myscript.py


Answer 5:

如果您使用的是Windows,您可以在Python文件的顶部以下行。

#! P:\Workspace\pythontut\Scripts python


文章来源: Running python script from inside virtualenv bin is not working