由于某些原因,我必须在本地计算机上移动我的Web应用程序。 我需要从 Python 脚本中提取一些信息。我已经遵循了很多指南,并在堆栈溢出上回答了这个问题,但我有一个奇怪的问题。我得到了一个简单的Web应用程序,它从jquery中调用ajax到php文件,从python脚本中检索一些信息,然后php文件详细说明它们并发送回javascript。我的问题是PHP文件:
<?php
$test = 'just a string to elaborate';
$result = system("cd ~/Scrivania/test && python script3.py ". escapeshellarg($test));
var_dump($result);
?>
和 Python 脚本:
#!/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))
此命令不会执行,并且在错误日志中我得到:
回溯(最近一次调用):文件"script3.py",第 5 行,在 从 sklearn.feature_extraction.text 导入 CountVectorizer 导入错误:没有名为 sklearn.feature_exctraction.text 的模块
显然,scikit-learn及其所有组件都已安装,并且效果很好,如果我从shell运行相同的命令,它可以工作并给我正确的输出。如果我尝试运行不同的脚本而不是当前脚本,例如:
import sys
import os
print('hello')
我得到了输出。
我真的无法弄清楚问题是什么,以及为什么从php调用的python无法加载scikit。
我知道从 php 调用 python 脚本不是一个好主意,但也不是一个确定的解决方案(我只需要一个离线工作的应用程序版本)。
蟒蛇版本:2.7;
我已经尝试在cgi-bin文件夹内移动。
任何帮助将不胜感激。尼科
同样的问题困了好几天,这是我发现的:
您的本地库与 xamp/Mamp 使用的库之间存在差异,这就是为什么运行基本的 python 脚本而不是带有导入的脚本的原因。
你要做的是复制你的本地库(sklearn ..等)并将其粘贴到 Xamp lib 文件夹中,对我有用,就像一个魅力。
~干杯