WSGI: ImportError: No module named hello (module in the same directory of the main .py file)
WSGI: ImportError: No module named hello (module in the same directory of the main .py file)
这不是 的副本,因为这里我 不是 使用任何 virtualenv,而且我 不是 试图导入另一个框架的模块(例如 django),但只是一个模块 在同一目录 .
这是我的设置:
/var/www/test/app.py
:
import os, time, sys
from bottle import route, run, template, default_app
os.chdir(os.path.dirname(os.path.abspath(__file__)))
import hello
@route('/')
def index():
return 'Hello world Python ' + sys.version
application = default_app()
/var/www/test/hello.py
:
# just an example module
def test():
print 'hello'
Apache 配置:
<VirtualHost *:80>
ServerName example.com
<Directory />
Require all granted
</Directory>
WSGIScriptAlias / /var/www/test/app.py
WSGIDaemonProcess test user=www-data group=www-data processes=5 threads=5 display-name=test python-path=/var/www/test/
</VirtualHost>
然后我得到:
ImportError: No module named hello
哪里不对? WSGIDaemonProcess ... python-path=/var/www/test/
不应该帮助加载模块 hello
吗?
解决方法是:
确实有一个WSGIDaemonProcess ... python-path=...
,
还有一个 WSGIScriptAlias ... process-group=...
(不知道为什么这个 process-group
参数与允许或不允许从相同的目录,但它有效!)
示例:
WSGIScriptAlias / /var/www/test/app.py process-group=test
WSGIDaemonProcess test user=www-data group=www-data processes=5 threads=5 display-name=test python-path=/var/www/test/
另请参阅:https://bottlepy.org/docs/dev/deployment.html#apache-mod-wsgi
Apache 不会切换到当前工作目录,因此它不会在您认为的地方搜索 hello。
您可以按以下方式更改 app.py。
import os, time, sys
from bottle import route, run, template, default_ap
# add the scripts directory to the python path so that hello can be found
sys.path.insert(0, os.path.realpath(os.path.dirname(__file__)))
优点是您不必弄乱 apache 配置文件
这不是
这是我的设置:
/var/www/test/app.py
:
import os, time, sys
from bottle import route, run, template, default_app
os.chdir(os.path.dirname(os.path.abspath(__file__)))
import hello
@route('/')
def index():
return 'Hello world Python ' + sys.version
application = default_app()
/var/www/test/hello.py
:
# just an example module
def test():
print 'hello'
Apache 配置:
<VirtualHost *:80>
ServerName example.com
<Directory />
Require all granted
</Directory>
WSGIScriptAlias / /var/www/test/app.py
WSGIDaemonProcess test user=www-data group=www-data processes=5 threads=5 display-name=test python-path=/var/www/test/
</VirtualHost>
然后我得到:
ImportError: No module named hello
哪里不对? WSGIDaemonProcess ... python-path=/var/www/test/
不应该帮助加载模块 hello
吗?
解决方法是:
确实有一个
WSGIDaemonProcess ... python-path=...
,还有一个
WSGIScriptAlias ... process-group=...
(不知道为什么这个process-group
参数与允许或不允许从相同的目录,但它有效!)
示例:
WSGIScriptAlias / /var/www/test/app.py process-group=test
WSGIDaemonProcess test user=www-data group=www-data processes=5 threads=5 display-name=test python-path=/var/www/test/
另请参阅:https://bottlepy.org/docs/dev/deployment.html#apache-mod-wsgi
Apache 不会切换到当前工作目录,因此它不会在您认为的地方搜索 hello。
您可以按以下方式更改 app.py。
import os, time, sys
from bottle import route, run, template, default_ap
# add the scripts directory to the python path so that hello can be found
sys.path.insert(0, os.path.realpath(os.path.dirname(__file__)))
优点是您不必弄乱 apache 配置文件