我能用一个吗要求.txt文件来处理本地python目录?

2024-05-20 02:31:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个目录结构:

src/
--scripts/
----foo/a.py
----bar/b.py
--lib1
--lib2
--lib3

如果要使用lib1、lib2、lib3中的模块的可运行python脚本的scripts/foo/和scripts/bar/be目录,那么它的意图是。脚本、lib1、lib2和lib3都是独立的内部git存储库,正在积极开发中。没有可依赖的静态接口或已发布版本。基本上,它们都是由一个小团队几乎同时编写的。在

我玩过lib[1-3]子模块的制作,我真的很讨厌这个工作流程。我想我想要的是能够从foo/a.py执行“import lib1”,并让它使用lib1中的当前代码。一旦事情成熟,我们可能会对所有的东西进行版本化,并努力生产出合适的软件包。在

一种方法是在每个脚本中混用sys.path,以显式地查找“../../”或其他内容。我想知道有没有更优雅的。我能不能找些类似pip install -r requirements.txt的东西来帮我做这项工作?我不想做一个正式的pypi设置.py,我只想得到一个指向lib[1-3]目录当前内容的指针。我喜欢的原因要求.txt方法是,随着libs的成熟,我将把版本和git url放在那里。在

或者,有没有完全不同的方法?在


Tags: 模块方法pygit版本目录脚本内容
1条回答
网友
1楼 · 发布于 2024-05-20 02:31:34

以通常的方式从git存储库安装模块需要一个setup.py,但它可以是一个最小值,而不是像PyPI模块那样更完整的模块。例如:

#!/usr/bin/env python

from distutils.core import setup

setup(
    name="foo",
)

如果您将类似的内容放入每个lib存储库中,那么您可以使用-e git://git.example.com/foo.git#egg=foo使您的需求文件指向git repo。如果您将其安装到virtualenv中,那么它将出现在virtualenv目录中的src/foo处,并且当从该virtualenv运行Python时,它将自动添加到sys.path。在

-e选项还接受一个本地目录作为参数,因此如果您保证在从requirements.txt安装时当前工作目录始终是项目的根目录(以便正确解析相对路径),则在其中编写-e lib1之类的内容应该可以正常工作,如果需要的话,您仍然可以将库作为git子模块引用。在

如果您决定而不是来创建setup.py,那么您的任务就是模拟运行python setup.py develop时会发生什么。此命令执行两个操作(至少在Python2.7中):

  • 它在您的virtualenv中的site-packageslib目录中创建一个指向目标源目录的egg link。在
  • 它向easy-install.pth添加一行,该行也位于site-packages目录中,该目录也指向目标源目录。在

您可以选择通过运行setup.py editable以外的方法执行上述两个操作,并在当前版本的Python中获得相同的效果,但当然,在较新版本的Python中,可编辑发行版的实现可能会发生变化。在

相关问题 更多 >