编程语言
首页 > 编程语言> > python – 如何在生成的生成脚本前添加路径

python – 如何在生成的生成脚本前添加路径

作者:互联网

zc.buildout使用zc.recipe.egg在我们的< package> / bin /目录中生成的脚本如下所示:

#! <python shebang> -S

import sys
sys.path[0:0] = [
    ... # some paths derived from the eggs
    ... # some other paths included with zc.recipe.egg `extra-path`
]

# some user initialization code from zc.recipe.egg `initialization`

# import function, call function

我无法找到一种方法以编程方式在每个脚本中引入的sys.path构造中添加路径.这可能吗?

原因:我在全局安装了我的python项目版本,并在本地安装了另一个版本(off-buildout tree).我希望能够在这两个版本之间切换.

注意:显然,可以使用zc.recipe.egg / initialization属性添加如下内容:

initialization = sys.path[0:0] = [ /add/path/to/my/eggs ]

但是,还有其他方法吗?额外的一点是一个例子!

解决方法:

最后,通过创建我自己的buildout配方,我可以在这里找到一个工作环境:https://github.com/idiap/local.bob.recipe.包含配方的文件是这一个:https://github.com/idiap/local.bob.recipe/blob/master/config.py.在类构造函数中有许多特定于我们软件的检查和一些额外的改进,但不要为此烦恼. “real meat(TM)”位于该类的install()方法中.它或多或少都是这样的:

egg_link = os.path.join(self.buildout['buildout']['eggs-directory'], 'external-package.egg-link')
f = open(egg_link, 'wt')
f.write(self.options['install-directory'] + '\n')
f.close()
self.options.created(egg_link)
return self.options.created()

这样就可以了.我的外部(基于CMake)包现在只需要与它构建的python包并行创建正确的.egg-info文件.我可以使用上面的配方,使用这样的特定包安装:

[buildout]
parts = external_package python
develop = .
eggs = my_project
       external_package
       recipe.as.above

[external_package]
recipe = recipe.as.above:config
install-directory = ../path/to/my/local/package/build

[python]
recipe = zc.recipe.egg
interpreter = python
eggs = ${buildout:eggs}

如果要切换安装,只需更改上面的install-directory属性即可.如果您希望使用系统范围内的默认安装,只需从buildout.cfg文件中完全删除recipe.as.above结构. Buildout只会找到全局安装,无需任何额外配置.卸载也可以正常工作.因此,在构建之间切换将起作用.

这是我们在这里使用的完全工作的buildout .cfg文件:https://github.com/idiap/bob.project.example/blob/master/localbob.cfg

问题是:是否有更简单的方法来实现相同的外部配方?

标签:python,path,buildout
来源: https://codeday.me/bug/20190709/1415713.html