我有一个Python作业,我正试图在Docker镜像中发布。代码的结构使得某些模块从modules
文件夹导入,因此我已添加到Python路径中。
具体来说,Dockerfile是
FROM python:3
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app
ENV PYTHONPATH "/usr/src/app"
RUN pip3 install -r requirements.txt
正如您所看到的,我正在尝试为PYTHONPATH设置环境变量,以便它可以在同一工作目录中找到内容。
要运行的脚本称为main.py
,当我在本地运行时(不是从docker)运行
PYTHONPATH=$PYTHONPATH:$HOME/job-path python3 main.py
运行正常。
有了这个Dockerfile,在构建我从docker inspect <ID>
获得的图像后,Env字段包含
"Env": [
"PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=C.UTF-8",
"PYTHON_VERSION=3.6.4",
"PYTHON_PIP_VERSION=9.0.1",
"PYTHONPATH=/usr/src/app"
]
所以它看起来很好吗?但docker run
给了我一个
ModuleNotFoundError: No module named 'modules'
答案 0 :(得分:0)
这里的问题是,您复制到__init__.py
的src文件夹中可能没有/usr/src/app
。这就是为什么modules
软件包未被识别的原因。您可以将__init__.py
添加到您的src文件夹中,也可以将modules
添加到PYTHONPATH
ENV PYTHONPATH "/usr/src/app/:/usr/src/app/modules/"
请注意,如果您的modules
文件夹包含子文件夹,则它还应包含__init__.py
答案 1 :(得分:0)
语法是
$data = Data::firstOrCreate([
'bulan' => $bulan,
'tahun' => $tahun,
'nama_pkp' => $v["nama_pkp"],
'keterangan'=> $v["keterangan"],
'no_faktur_pajak' => $v["no_faktur_pajak"],
'tgl_faktur_pajak' => $tgl_faktur_pajak_format,
'ref' => $v["ref"],
'dpp' => $v["dpp"],
'ppn' => $ppn,
'invoice_no'=> $v["invoice_no"],
'nama_tenant' => $v["nama_tenant"],
'pph_4_deyon' => $v["pph_4_deyon"],
'pph_4_tenant' => $v["ppn"],
'no_p_l_tenant' => $v["no_potong_dan_lapor_tenant"],
'bukpot_oleh_tenant'=> $v["bukti_potong_oleh_tenant"],
'tgl_p_l_penyewa' => $tgl_p_l_penyewa_format,
'pph_p_l_tenant'=> $v["pph_potong_dan_lapor_tenant"],
'note' => $v["note"],
'checklist' => $v["checklist"],
'selisih' => $selisih
]);
没有等号,您将创建两个空变量;第二个的名称是ENV variable1[=value1] variable2[=value2] ...
。你想要
/usr/src/app
在变量名称和其值之间带有等号。
如果要附加到现有值,则可以:
ENV PYTHONPATH="/usr/src/app"