Python 在Docker中安装pip时找不到模块
我的Python 在Docker中安装pip时找不到模块,python,docker,Python,Docker,我的setup.py中有以下内容 entry_points={ 'console_scripts': [ 'my-app=main:run', ], def run(): actual_run() 我的文件结构是 ▶ tree -L 2 . ├── Dockerfile ├── README.md ├── redis.conf ├── setup.cfg ├── setup.py ├── src │ ├── main
setup.py中有以下内容
entry_points={
'console_scripts': [
'my-app=main:run',
],
def run():
actual_run()
我的文件结构是
▶ tree -L 2
.
├── Dockerfile
├── README.md
├── redis.conf
├── setup.cfg
├── setup.py
├── src
│ ├── main.py
│ ├── settings.py
│ ├── bfile.py
│ └── afile.py
在mymain.py中
entry_points={
'console_scripts': [
'my-app=main:run',
],
def run():
actual_run()
本地,在执行时以虚拟的方式
pip install -e . && my-app
它运行平稳
但是,在使用以下Dockerfile
FROM python:3.9-slim-buster
WORKDIR /app
COPY . .
RUN pip3 install .
CMD [ "my-app"]
我明白了
回溯(最近一次呼叫最后一次):
文件“/usr/local/bin/my app”,第5行,在
从主导入运行
ModuleNotFoundError:没有名为“main”的模块
我注意到,在我的图像中,在/usr/local/lib/python3.9/site packages/
中,只有一个名为my-app-0.0.1.dist info
的文件,而不是包含源文件的目录
为什么会这样?您没有给出最低可行的设置.py
,但下一步可能会起作用,仅供参考:
Dockerfile:
FROM python:3.9-slim-buster
WORKDIR /app
COPY . .
RUN pip3 install .
CMD [ "my-app"]
from setuptools import setup, find_packages
setup(
name="my-app",
version="0.0.1",
packages=['main'],
package_dir={'main':'src'},
entry_points={
'console_scripts': [
'my-app=main.main:run',
],
}
)
def run():
print("hello world")
# docker build -t abc:1 .
# docker run --rm abc:1
hello world
setup.py:
FROM python:3.9-slim-buster
WORKDIR /app
COPY . .
RUN pip3 install .
CMD [ "my-app"]
from setuptools import setup, find_packages
setup(
name="my-app",
version="0.0.1",
packages=['main'],
package_dir={'main':'src'},
entry_points={
'console_scripts': [
'my-app=main.main:run',
],
}
)
def run():
print("hello world")
# docker build -t abc:1 .
# docker run --rm abc:1
hello world
src/main.py:
FROM python:3.9-slim-buster
WORKDIR /app
COPY . .
RUN pip3 install .
CMD [ "my-app"]
from setuptools import setup, find_packages
setup(
name="my-app",
version="0.0.1",
packages=['main'],
package_dir={'main':'src'},
entry_points={
'console_scripts': [
'my-app=main.main:run',
],
}
)
def run():
print("hello world")
# docker build -t abc:1 .
# docker run --rm abc:1
hello world
执行:
FROM python:3.9-slim-buster
WORKDIR /app
COPY . .
RUN pip3 install .
CMD [ "my-app"]
from setuptools import setup, find_packages
setup(
name="my-app",
version="0.0.1",
packages=['main'],
package_dir={'main':'src'},
entry_points={
'console_scripts': [
'my-app=main.main:run',
],
}
)
def run():
print("hello world")
# docker build -t abc:1 .
# docker run --rm abc:1
hello world
解释:
FROM python:3.9-slim-buster
WORKDIR /app
COPY . .
RUN pip3 install .
CMD [ "my-app"]
from setuptools import setup, find_packages
setup(
name="my-app",
version="0.0.1",
packages=['main'],
package_dir={'main':'src'},
entry_points={
'console_scripts': [
'my-app=main.main:run',
],
}
)
def run():
print("hello world")
# docker build -t abc:1 .
# docker run --rm abc:1
hello world
在上面,src
文件夹将映射到main
模块,并且packages=['main']
指定将安装到站点包中的python包名
在最终图像中,包的位置如下所示:
root@7b5ce63d8226:/usr/local/lib/python3.9/site-packages/main# ls
__pycache__ main.py
因此,您需要使用main.main:run
调用您的函数