2016-04-24 3 views
0

Aus irgendwelchen Gründen muss ich meine Webanwendung auf meinem lokalen Rechner verschieben. Ich muss einige Informationen aus einem Python-Skript extrahieren. Ich habe viele Anleitungen verfolgt und hier auf stackoverflow geantwortet, aber ich habe ein seltsames Problem. Ich habe eine einfache Web-App, die von jQuery mit einem AJAX-Aufruf an eine PHP-Datei, abrufen Sie einige Informationen aus einem Python-Skript, dann die PHP-Datei erarbeiten sie aus und senden Sie zurück zu Javascript. Mein Problem ist mit der PHP-Datei:Ubuntu xampp kann kein Python-Skript ausführen

<?php 
$test = 'just a string to elaborate'; 
$result = system("cd ~/Scrivania/test && python script3.py ". escapeshellarg($test)); 
var_dump($result); 
?> 

und dem Python-Skript:

#!/usr/bin/env python 
import sys 
import os 
import numpy as np 
from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.naive_bayes import MultinomialNB 
from sklearn.pipeline import Pipeline 
from sklearn.metrics import confusion_matrix, f1_score 
from sklearn.datasets import load_files 
from sklearn.svm import SVC 
from sklearn.feature_extraction.text import TfidfTransformer 
from sklearn.naive_bayes import MultinomialNB 
from sklearn.metrics import accuracy_score 
from sklearn.metrics import classification_report 
string = sys.argv[1] 
sets = load_files('scikit') #carico il set 




count_vect = CountVectorizer() #bigrammi count_vect = CountVectorizer() per bags of words 
X_train_counts = count_vect.fit_transform(sets.data)  #applico al set 



tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts) 
X_train_tf = tf_transformer.transform(X_train_counts) 


tfidf_transformer = TfidfTransformer() 
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts) 



clf = MultinomialNB().fit(X_train_tfidf, sets.target) 
docs_new = [string] 
X_new_counts = count_vect.transform(docs_new) 
X_new_tfidf = tfidf_transformer.transform(X_new_counts) 
predicted = clf.predict(X_new_tfidf) 
for doc, category in zip(docs_new, predicted): 
    #print('%r => %s' % (doc, sets.target_names[category])) 
    #print(sets.target_names) 
    print(clf.predict_proba(X_new_tfidf)) 

Dieser Befehl würde ich nicht ausgeführt werden, und im Fehlerprotokoll bekam:

Traceback (most recent call last): File "script3.py", line 5, in from sklearn.feature_extraction.text import CountVectorizer importError: No module named sklearn.feature_exctraction.text

offensichtlich scikit-lernen und alle seine Komponenten sind installiert, und es funktioniert gut, wenn ich von der Shell den gleichen Befehl läuft es funktioniert und gaben mir korrekte Ausgabe. Wenn ich versuche, ein anderes Skript, anstatt die aktuellen, so etwas wie zu laufen:

import sys 
import os 
print('hello') 

ich die Ausgabe bekam.
Ich kann wirklich herausfinden, was das Problem ist und warum Python aus PHP aufgerufen cant laden scikit.
Ich weiß, dass Aufruf Python-Skripte von PHP ist keine gute Idee, aber ist keine endgültige Lösung (ich brauche nur eine Version meiner App, die offline funktioniert).
Python-Version: 2.7;
Ich habe bereits versucht, in cgi-bin-Ordner zu bewegen.
Jede Hilfe würde wirklich geschätzt werden. Nico

Antwort

0

ich tagelang mit dem gleichen Problem stecken geblieben, hier ist, was ich herausgefunden:

Es gibt einen Unterschied zwischen lokalen Bibliotheken und dem einen, die von xamp/Mamp, deshalb der grundlegenden Python-Skript laufen und nicht der mit Importen.

Was Sie tun müssen, ist Ihre lokale lib kopieren (sklearn .. etc) und fügen Sie sie in den Ordner xamp lib, arbeitete für mich wie ein Charme.

~ Bach