【问题标题】:Deploying a custom python package with `pip`使用 `pip` 部署自定义 python 包
【发布时间】:2018-02-08 19:04:46
【问题描述】:

我的文件系统上有一个自定义 Python 包(称为 MyProject),带有 setup.pyrequirements.txt。这个包需要被Flask服务器使用(将部署在AWS/EC2/EB上)。

在我的 Flask 项目目录中,我创建了一个 virtualenv 并运行 pip install -e ../path/to/myProject

但由于某种原因,MyProject 的上游 git repo 出现在pip freeze

...
llvmlite==0.19.0
-e git+https://github.com/USERNAME/MYPROJECT.git@{some-git-hash}
python-socketio==1.8.0
...

对 git 的引用是一个问题,因为存储库是私有的,部署服务器没有(也不应该,也永远不会)拥有访问它的凭据。部署服务器甚至还没有安装 git(pip 未经我的许可就假设它似乎非常有问题)。 MyProjectrequirements.txtsetup.py 中没有任何暗示 git 的内容,所以我不确定这是从哪里来的。

我可以将项目复制到Flask项目的一个子目录下,然后在MyFlaskProject的requirements.txt中放入以下内容:

...
llvmlite==0.19.0
./MyProject
python-socketio==1.8.0
...

但这不起作用,因为路径是相对于pip 进程运行时的工作目录,而不是requirements.txt。确实,似乎pip is broken in this respect。在我的例子中,EC2 从某个其他目录运行其安装脚本(指定了 requirements.txt 的完整路径),正如预期的那样,这失败了。

将自定义 python 包部署为另一个项目的依赖项的正确方法是什么?

【问题讨论】:

  • 它是否适用于绝对路径?
  • @SimonHobbs:不,因为绝对路径是由部署服务器决定的。它与我的机器上的不同,不受我的控制,并且可能会因部署而异。

标签: python amazon-ec2 pip virtualenv


【解决方案1】:

要从 git repo 安装您自己的 python 包,您可能需要检查this post

要解决凭证问题,为什么不在 EC2 上安装 git?您可以简单地创建一个 ssh 密钥并将其与 MyProject 存储库共享。

我在 Jenkins 部署的 ECS 实例上使用此解决方案(使用 Habitus 在构建映像时隐藏 Jenkins 的 ssh 密钥),它对我来说很好用!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2021-06-20
    • 2020-10-24
    • 2018-10-05
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多