<p>我正在尝试在Windows上运行jythonservlets。我连最简单的都跑不了地狱世界.py. 我得到以下500个错误:</p>
<pre class="lang-none prettyprint-override"><code>message Servlet.init() for servlet [PyServlet] threw exception
...
description Le serveur a rencontré une erreur interne qui l''a empêché de satisfaire la requête.
exception
javax.servlet.ServletException: Servlet.init() for servlet [PyServlet] threw exception
...
cause mère
ImportError: Cannot import site module and its dependencies: No module named site
Determine if the following attributes are correct:
* sys.path: ['C:\\apache-tomcat-8.5.24\\webapps\\jython\\WEB-INF\\lib\\Lib', '__classpath__', '__pyclasspath__/']
This attribute might be including the wrong directories, such as from CPython
* sys.prefix: C:\apache-tomcat-8.5.24\webapps\jython\WEB-INF\lib
This attribute is set by the system property python.home, although it can
be often automatically determined by the location of the Jython jar file
You can use the -S option or python.import.site=false to not import the site module
org.python.core.Py.ImportError(Py.java:328)
org.python.core.Py.importSiteIfSelected(Py.java:1563)
org.python.util.PythonInterpreter.<init>(PythonInterpreter.java:116)
...
</code></pre>
<p>Jython部署在<code>C:\jython2.7.0</code>下</p>
<p>我最基本的webapp在<code>C:\apache-tomcat-8.5.24\webapps\jython</code>下</p>
<p><code>jython.jar</code>(不是独立的jar)被复制为<code>C:\apache-tomcat-8.5.24\webapps\jython\WEB-INF\lib\jython.jar</code></p>
<p>我的<code>web.xml</code>取自<a href="http://www.jython.org/javadoc/org/python/util/PyServlet.html" rel="nofollow noreferrer">http://www.jython.org/javadoc/org/python/util/PyServlet.html</a>:</p>
^{pr2}$
<p>错误消息显示,<code>sys.path</code>中包含了错误的目录。^{my7>为什么不从<cd7>初始化,它是从<code>jython.jar</code>的位置猜出来的。在</p>
<h2><code>PyServlet</code>初始化</h2>
<p>我看了一下<a href="https://bitbucket.org/jython/jython/raw/d74f8c2cd56f24c7af8b1aab36433f941d0a44e9/src/org/python/util/PyServlet.java" rel="nofollow noreferrer">the initialization code</a>,看了<code>PyServlet</code>:</p>
<pre class="lang-java prettyprint-override"><code>@Override
public void init() {
Properties props = new Properties();
// Config parameters
Enumeration<?> e = getInitParameterNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
props.put(name, getInitParameter(name));
}
// ...
init(props, getServletContext());
}
reset();
}
/**
* PyServlet's initialization can be performed as a ServletContextListener or as a regular
* servlet, and this is the shared init code. If both initializations are used in a single
* context, the system state initialization code only runs once.
*/
protected static void init(Properties props, ServletContext context) {
String rootPath = getRootPath(context);
context.setAttribute(INIT_ATTR, true);
Properties baseProps = PySystemState.getBaseProperties();
// Context parameters
Enumeration<?> e = context.getInitParameterNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
props.put(name, context.getInitParameter(name));
}
if (props.getProperty("python.home") == null
&& baseProps.getProperty("python.home") == null) {
props.put("python.home", rootPath + "WEB-INF" + File.separator + "lib");
}
PySystemState.initialize(baseProps, props, new String[0]);
// ...
PySystemState.add_classdir(rootPath + "WEB-INF" + File.separator + "classes");
PySystemState.add_extdir(rootPath + "WEB-INF" + File.separator + "lib", true);
}
</code></pre>
<p>我希望将<code>python.home</code>初始化参数添加为属性,并将该属性用于构造<code>sys.path</code><a href="http://www.jython.org/javadoc/org/python/util/PyServlet.html" rel="nofollow noreferrer">as shown in the JavaDoc</a>!在</p>
<p>我错过了什么?在</p>