【问题标题】:Automating post-install of Python dependency from Git using Poetry使用 Poetry 从 Git 自动安装 Python 依赖项
【发布时间】:2020-03-22 20:04:09
【问题描述】:

我使用Poetry 进行Python 依赖管理,以及PyCrate 进行ASN.1 编码/解码。

PyCrate 是从 GitHub 拉取的依赖项,一旦从 GitHub 拉取,就可以通过在 PyCrate 目录中运行安装文件来安装。

python setup.py install

如果可能,我想将安装步骤集成到我的pyproject.toml 中。我当前的pyproject.toml 包括 PyCrate 如下:

…
[tool.poetry.dependencies]
pycrate = {git = "https://github.com/P1sec/pycrate.git"}
…

这将从 GitHub 存储库中提取 PyCrate,但会进入 Poetry 创建的 virtualenv 中的 src 文件夹。

有没有办法在执行poetry install 时自动运行安装脚本?我已经研究过使用Poetry scripts,但目前还不能正常运行。

我当前的设置涉及运行 poetry install,然后手动运行 PyCrate 的 setup.py install,但是如果可以的话,我希望我的 poetry install 执行完整设置。

对此的任何帮助将不胜感激。

【问题讨论】:

    标签: python python-poetry


    【解决方案1】:

    当您运行 poetry install 时,诗歌应该已经为您运行 python setup.py install

    Poetry 基本上只是运行pip install package,它会下载包,基本上只是在包上运行python setup.py install

    在后台,[pip] 将运行 python setup.py install

    来源:https://stackoverflow.com/a/15732821/10149169

    但是,poetry 仅将软件包安装在隔离的虚拟环境中,以避免污染您计算机的其余部分。

    要运行带有诗歌的东西,您需要使用poetry run YOUR_COMMAND 运行它

    为了在虚拟环境中运行脚本,你必须运行poetry shell进入虚拟环境,或者poetry run YOUR_COMMAND。例如。要运行 Python 脚本,您应该执行 poetry run python your_python_script.py

    示例

    如果您有一个包含以下pyproject.toml 文件的文件夹:

    [tool.poetry]
    name = "test"
    version = "0.1.0"
    description = ""
    authors = ["Your Name <you@example.com>"]
    
    [tool.poetry.dependencies]
    python = "^3.6"
    pycrate = {git = "https://github.com/P1sec/pycrate.git"}
    
    [tool.poetry.dev-dependencies]
    
    [build-system]
    requires = ["poetry>=0.12"]
    build-backend = "poetry.masonry.api"
    

    运行poetry install后,你可以通过运行poetry run SCRIPT_NAME访问所有的pyrcrate脚本:

    # works because pycrate_showmedia.py was installed with poetry install
    me@computer:~/example-project$ poetry run poetry run pycrate_showmedia.py
    usage: pycrate_showmedia.py [-h] [-bl BL] [-wt] input
    pycrate_showmedia.py: error: the following arguments are required: input
    

    如果你有导入​​pycrate库的Python文件,也需要使用poetry run运行:

    me@computer:~/example-project$ cat test.py 
    import pycrate_core
    print(pycrate_core.__version__)
    me@computer:~/example-project$ poetry run python test.py
    

    【讨论】:

    • 太好了,谢谢你这么详细的解释!
    • 我很困惑,这不是似乎是自动化的。如果我将此包发送给其他人,他们也必须运行 poetry run post-install.py
    • 嗨@IsaiahShiner,作者询问使用诗歌自动安装依赖项,假设所有依赖项都可以通过pip 安装,例如通过运行python setup.py install。 Python 包通常没有post-install.py 脚本,因为其中的任何内容都可以添加到setup.py 文件的末尾。
    • 啊,现在我明白作者在问什么了。我想我的问题有所不同:我如何在 setup.py 中添加诗歌,因为没有 setup.py。我找不到这方面的任何信息。
    • @AloisKlink 我创建了自己的问题:stackoverflow.com/questions/59802468/…
    猜你喜欢
    • 2022-08-24
    • 2014-12-31
    • 1970-01-01
    • 2016-11-02
    • 2015-04-16
    • 2023-04-03
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    相关资源
    最近更新 更多