Flask python 模块访问子目录
Flask python module accessing subdirectory
我有一个非常标准的应用程序结构:
- /var/www/myapp/
- myapp.wsgi
- app/
- static/
- templates/
- data/
- views.py
- mymodule.py
其中 views.py
包含来自 mymodule.py
的内容,它读取 data/
中的一些 xml 文件,如下所示:
self.tree = etree.parse('app/data/myfile.xml')
我已经像这样设置了 wsgi:
<VirtualHost *:80>
ServerName myapp.com
ServerAdmin me@me.com
WSGIScriptAlias / /var/www/myapp/myapp.wsgi
<Directory /var/www/myapp/app/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/myapp/app/static
<Directory /var/www/myapp/app/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Apache 给我错误:
IOError: [Errno 2] No such file or directory: 'app/data/myfile.xml
我试过使用各种路径从 mymodule.py 访问文件 - app/data、/app/data、/data、data/ 等。没有任何运气。我究竟做错了什么?
此外,我希望 data/
仅供我的模块读取,而不是在线公开。这可能吗?
这在测试 Flask 网络服务器下工作正常
我认为问题可能与相对路径有关,因为 mod_wsgi 的初始目录是 /。
您可以从脚本路径获取文件的完整路径:
import os
base_path = os.path.dirname(__file__)
myfile_path = os.path.join(base_path, 'app/data/myfile.xml')
self.tree = etree.parse(myfile_path)
正如@thkang here 所建议的,您还可以更改您的 cwd:
import os
os.chdir('/var/www/myapp/app')
来源和更多信息:
https://code.google.com/p/modwsgi/wiki/ApplicationIssues#Application_Working_Directory
我有一个非常标准的应用程序结构:
- /var/www/myapp/
- myapp.wsgi
- app/
- static/
- templates/
- data/
- views.py
- mymodule.py
其中 views.py
包含来自 mymodule.py
的内容,它读取 data/
中的一些 xml 文件,如下所示:
self.tree = etree.parse('app/data/myfile.xml')
我已经像这样设置了 wsgi:
<VirtualHost *:80>
ServerName myapp.com
ServerAdmin me@me.com
WSGIScriptAlias / /var/www/myapp/myapp.wsgi
<Directory /var/www/myapp/app/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/myapp/app/static
<Directory /var/www/myapp/app/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Apache 给我错误:
IOError: [Errno 2] No such file or directory: 'app/data/myfile.xml
我试过使用各种路径从 mymodule.py 访问文件 - app/data、/app/data、/data、data/ 等。没有任何运气。我究竟做错了什么?
此外,我希望 data/
仅供我的模块读取,而不是在线公开。这可能吗?
这在测试 Flask 网络服务器下工作正常
我认为问题可能与相对路径有关,因为 mod_wsgi 的初始目录是 /。
您可以从脚本路径获取文件的完整路径:
import os
base_path = os.path.dirname(__file__)
myfile_path = os.path.join(base_path, 'app/data/myfile.xml')
self.tree = etree.parse(myfile_path)
正如@thkang here 所建议的,您还可以更改您的 cwd:
import os
os.chdir('/var/www/myapp/app')
来源和更多信息:
https://code.google.com/p/modwsgi/wiki/ApplicationIssues#Application_Working_Directory