使用`pip`部署自定义python包

时间:2017-08-30 23:14:49

标签: python amazon-ec2 pip virtualenv

我的文件系统上有一个自定义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在没有我的许可的情况下假定它确实存在问题。 MyProject requirements.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包部署为另一个项目的依赖项的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

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

要整理凭据问题,为什么不在EC2上安装git?您只需创建一个ssh密钥并与MyProject存储库共享即可。

我在Jenkins部署的ECS实例上使用此解决方案(Habitus在构建图像时隐藏Jenkin的ssh键)并且它对我来说很好用!