没有名为pandas的模块 - python路径或sys路径导入问题

时间:2018-01-29 21:43:03

标签: python python-3.x flask

我是Python新手,我很难理解导入和路径位置,尤其是sys pathPYTHONPATH

Python 3.6.2

我正试图在http/routes.py中点击API路线,然后导入drivers/test_driver.py,这样我就可以在其中运行函数。

  

ImportError:没有名为pandas的模块

使用Flask引导应用程序,在http://127.0.0.1:5000/运行:

$ export FLASK_APP=http/routes
$ flask run

routes.py

import sys
import os
from flask import Flask, url_for

from drivers.test_driver import * ####### BREAKING

app = Flask(__name__)
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

@app.route('/')
def api_root():
    return 'Welcome'

@app.route('/drivers')
def api_drivers():
    # Do something with imported drivers functions
    return 'All Drivers Ready'

if __name__ == '__main__':
    app.run()

test_driver.py

import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
print('Path: ', sys.path[len(sys.path)-1]) # '/Users/myname/Desktop/project/Lambda/drivers_app/drivers/..'
import pandas as pd
import boto as bt

def run():
    df = pd.read_csv('s3 location', engine='python')
    return 'this is working'

if __name__ == "__main__":
    output = run()
    print(output)

文件结构:

enter image description here

1 个答案:

答案 0 :(得分:0)

我怀疑您未使用虚拟环境,配置不正确,或者您可能忘记在您运行flask run的shell中激活它。 (开发Python项目时应始终使用虚拟环境;每个项目一个虚拟环境)。我不熟悉您所运行的操作系统的具体内容,因此我建议您阅读并遵循Hitchhiker's Guide to Python的前几部分。

如果你不确定你的shell是否激活了virtualenv,你可以随时which python(或等同于windows的任何东西,如果这是你的东西)并且它应该打印一条路径你的virtualenvs所在的位置,而不是系统python。

在您进入某些高级用例之前,弄乱sys.path是一个巨大的危险信号。你不应该这样做。我会将drivers模块(module ==带有__init__.py文件的文件夹)移动到http模块(文件夹)中,所以你有

$ tree . └── http ├── drivers │   ├── __init__.py │   └── test_driver.py ├── __init__.py └── routes.py

routes.py内,您使用相对导入并执行from .drivers.test_driver import run(使用from whatever import *通常被视为不良做法)。这应该可以减少混淆sys.path的需要。