我最近一直在研究 docker 镜像。我看到这个 docker 文档关于使用FROM scratch
. 我想看看我能走多远,只是为了好玩。我用Python编程。该文档说将示例 C 程序编译为二进制文件,将其复制到容器中,然后运行它。在容器中,我无法运行python <program_file>.
我看到了有关将 python 文件编译为二进制文件的堆栈交换帖子,这符合我们的测试用例。它提到使用pyinstaller
. 因此,我在一个测试文件上运行它hello.py
,该文件仅打印 Hello with pyinstaller hello.py
,并且收到一堆有关构建项目的消息。好的。我可以通过运行“dist/hello”在本地计算机中运行二进制文件(这是帖子中提到的二进制程序。所以我编写了 Dockerfile 来复制该程序并运行它。我的 Dockerfile 是
FROM scratch
ADD dist/hello /
CMD ["./hello"]
Run Code Online (Sandbox Code Playgroud)
我运行docker build . -t "hello:1.0"
然后docker run hello:1.0
......我收到一条错误消息:
standard_init_linux.go:211: exec user process caused "no such file or directory"
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?我做错了什么?是否可以让 pyinstaller 编译一个二进制 python 项目(多个文件,而不仅仅是这个文件),然后使用临时映像来运行它。如果可能的话,有什么注意事项吗?
假设我的代码是:
typedef stuct {
int x;
double y;
char z;
} Foo;
Run Code Online (Sandbox Code Playgroud)
会x
,y
以及z
,在内存旁边对方?指针算术可以“迭代”它们吗?我的 C 生锈了,所以我不能完全正确地测试这个程序。这是我的完整代码。
#include <stdlib.h>
#include <stdio.h>
typedef struct {
int x;
double y;
char z;
} Foo;
int main() {
Foo *f = malloc(sizeof(Foo));
f->x = 10;
f->y = 30.0;
f->z = 'c';
// Pointer to iterate.
for(int i = 0; i == sizeof(Foo); i++) {
if (i == 0) {
printf(*(f + i));
}
else if (i == (sizeof(int) + …
Run Code Online (Sandbox Code Playgroud) 我有一个与此类似的问题:有没有办法将 Python 程序编译为二进制并将其与 Scratch Dockerfile 一起使用?
在此页面中,我看到有人说 C 应用程序用-static
.
所以我有一个新问题:是否pyinstaller
有任何参数可以gcc -static
让Python应用程序在Scratch Docker镜像中运行良好?
我一生都无法弄清楚这段代码的问题。我在这里对许多类似的问题进行了研究,解决了目录是否正确、可能错误的函数调用等问题。
我希望有人可以帮助我。一切都在名为 loginapp 的应用程序中名为 login 的文件中。
这是 Login.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package login;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Login extends Application {
@Override
public void start(Stage stage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Login.fxml"));
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("Login.fxml"));
Scene scene = new Scene(root); …
Run Code Online (Sandbox Code Playgroud) 今天,我看到了 pyData 2017 的一个演示,演示者使用了 python 的 splat operator *
。想象一下我的惊讶,因为在他使用该方法之前,我将其视为一个指针。我认为 Python 的 splat 运算符类似于省略号,...
不是吗?谷歌搜索对我来说没有任何结果。他们是在某个时候改变了它还是一直都这样*
?如果他们确实改变了它,为什么?如果他们更改了它,是否存在实现差异和/或速度差异?
编辑:愤怒的评论者的“解包参数列表”。