繁体   English   中英

Flask Python模块访问子目录

[英]Flask python module accessing subdirectory

我有一个非常标准的应用程序结构:

- /var/www/myapp/
    - myapp.wsgi
    - app/
        - static/
        - templates/
        - data/
        - views.py
        - mymodule.py

其中views.py包含mymodule.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访问文件。没有运气。 我究竟做错了什么?

另外,我想让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 在这里建议的那样,您还可以更改cwd:

import os
os.chdir('/var/www/myapp/app')

来源和更多信息:

https://code.google.com/p/modwsgi/wiki/ApplicationIssues#Application_Working_Directory

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM