好吧,我有一个相当基本的python click
CLI应用程序,当它与容器中的绑定卷一起运行时(live dev on files),它似乎会破坏我在setup.py
中的entry_point
运行以下任一命令
$ docker run -it -v $(pwd):/opt/app gdax
$ docker run -it --mount src=$(pwd),target=/opt/app,type=bind gdax
我得到以下信息
^{pr2}$FROM python:3.6
RUN mkdir /opt/app
COPY . /opt/app
WORKDIR /opt/app
RUN pip install --editable .
CMD ["gdax", "--help"]
from setuptools import setup
setup(
name='gdax-cli',
version='0.1',
py_modules=['app'],
install_requires=[
'click==6.7',
'gdax==1.0.6'
],
entry_points='''
[console_scripts]
gdax=app:cli
''',
)
#!/usr/local/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'gdax-cli','console_scripts','gdax'
__requires__ = 'gdax-cli'
import re
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(
load_entry_point('gdax-cli', 'console_scripts', 'gdax')()
)
如果我不绑定卷,我可以很好地执行脚本,但我无法编辑主机上的文件。我相当确信这与绑定如何“覆盖”文件有关,并将破坏/usr/local/bin/gdax
加载setuptools
放置在那里的文件的能力。有什么方法可以绕过这个(在容器中调用python app.py
之外)?
当在当前目录中以可编辑的方式安装pip时,
<package>.egg-info
目录需要存在,python才能找到已安装的包。在可以通过
docker-compose.yml
装载点来“白名单”目录,如下所示:在本例中,当容器启动时,}目录都将出现。在
.git
和{对于任何有兴趣在开发期间通过
docker-compose run
调用Pythonentry_points
控制台脚本的人。将.egg-info
文件夹从正在运行的容器复制到挂载的主机目录中一次对我是有效的。在将
.egg-info
目录从运行的容器复制到主机。预先关闭挂载,这样.egg-info
目录不会被覆盖。重新启用挂载,所需的
^{pr2}$.egg-info
文件夹现在已经存在,因此安装的入口点应该可以工作,您可以运行命令,如:为了实现这一点,Python包需要在映像中以开发模式安装,就像使用}文件将不在符号链接的源代码目录中。在
RUN pip install -e /path/to/package/
,否则{当然,另一种选择,就像@Adam提到的,总是直接调用
CLI
脚本,比如:相关问题 更多 >
编程相关推荐