【发布时间】:2018-02-08 19:04:46
【问题描述】:
我的文件系统上有一个自定义 Python 包(称为 MyProject),带有 setup.py 和 requirements.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.txt 或 setup.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