Ich arbeite an einem Proof of Concept mit rpy2, um ein bestehendes R-Paket an einen Webdienst zu binden. Ich habe die Quelle für das Paket, wenn dies zur Behebung dieses Problems erforderlich ist. Ich entwickle gerade auch unter Windows, aber wenn dieses Problem durch die Verwendung von Linux gelöst wird, ist das in Ordnung, da dies meine geplante Umgebung ist.grDevices hält Datei geöffnet
Für meinen ersten Punkt in diesem POC, versuche ich ein Diagramm von diesem Paket zu erfassen, und es zu einer Web-Anfrage mit Flask. Der vollständige Code:
from flask import Flask, Response
from rpy2.robjects.packages import importr
import rpy2.robjects as ro
from tempfile import TemporaryDirectory
from os import path
app = Flask(__name__)
null = ro.r("NULL")
numeric = ro.r("numeric")
grdevices = importr("grDevices")
efm = importr('euroformix')
@app.route('/')
def index():
table = efm.tableReader('stain.txt')
list = efm.sample_tableToList(table)
with TemporaryDirectory() as dir_name:
print("Working in {0}".format(dir_name))
png_path = path.join(dir_name, "epg_mix.png")
print("png path {0}".format(png_path))
grdevices.png(file=png_path, width=512, height=512)
# Do Data Science Stuff Here
grdevices.dev_off()
with open(png_path, 'rb') as f:
png = f.read()
return Response(png, "image/png")
if __name__ == '__main__':
app.run(debug=True)
Wenn der Service schlagen, komme ich zurück PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\matt\\AppData\\Local\\Temp\\tmpgg65cagq\\epg_mix.png'
bei den Call-Stack Sehen, es geschieht, wenn TempDirectory()
aufzuräumen geht. Mit dem Flask-Debugger ist die Variable png
ebenfalls leer.
Also, wie mache ich grDevices
schließen Sie die Datei? Oder muss ich meinen POC anders machen?
die ganze "Do Daten Wissenschaft Stuff" moving block ruft eine Funktion auf, die schließlich 'plot()', 'text()', 'polygon()' und ot aufruft ihres. Unter Windows laufen die Grafikfenster auf. Ich arbeite daran, wie linux vm dafür eingerichtet wird. was zu einem Ausflug nach Xvfb führt. –
Leider habe ich derzeit keine Windows-Version, um dies zu versuchen. Seltsam, dass ein Windows auftaucht. Andernfalls sollten Sie unter Linux X11/xorg nicht benötigen, um R PNG-Grafiken zu plotten. Es ist schwierig, mehr zu helfen, ohne ein eigenständiges Beispiel zu versuchen, das Problem zu replizieren. – lgautier
Ich leite jetzt die App unter Linux, und es funktioniert perfekt. Ich denke, es ist nur etwas mit dem Verhalten von Windows, Dateien gegen Posix zu teilen. –