我有一个脚本我想在全球上市。 我已经与标准hashbang开始吧:
#! /usr/bin/env python
并链接到我的virtualenv的bin目录:
~/environments/project/env/bin/myscript
并补充说,目录到我的路径。 当我运行以下命令:
myscript
我得到一个导入错误与图书馆之一。 但是,如果我激活虚拟环境,并运行该脚本,它按预期工作。
我已经排除了与符号链接(我也尝试了移动的bin文件夹中的脚本)的问题。 我也试着运行使用python脚本
python ~/environments/project/env/bin/myscript
以前我是用一个脚本,启动了环境,然后跑到我的剧本,但我的印象是,脚本从该文件夹运行应与virtualenv中的解释器和站点包中运行。 为什么这个任何想法可能无法正常工作或某些方面,我能调试吗?
把脚本到你的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脚本。
我认为你是困惑,如何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请求前的环境; 你应该尽可能早地激活一个环境,而不是在这个过程中做一遍。
我面临着同样的问题,这种解决方案提出了: 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
如果您使用的是Windows,您可以在Python文件的顶部以下行。
#! P:\Workspace\pythontut\Scripts python