python运行ImportError:没有名为的模块

时间:2016-05-31 04:27:31

标签: python

This is my project structure

这是我的项目结构。我在我的项目中使用virtualenv,但是当我运行它时,它有一个ImportError.I使用 Mac enter image description here enter image description here

  

但我可以成功运行它使用Pycharm

enter image description here

所以如何通过Terminal成功运行它。因为我想在 cron

>

Ubuntu 服务器中运行它

感谢您的回答。在这里我展示了我的解决方案。我修改了 handler.py 我认为它可能与The Module Search Path有关。 所以我将项目路径添加到 PYTHONPATH

import os

project_home = os.path.realpath(__file__)
project_home = os.path.split(project_home)[0]
import sys

sys.path.append(os.path.split(project_home)[0])
import shutil
from modules import db, json_parse, config_out
from init_log import init as initlog

initlog()

if __name__ == '__main__':
    try:
        columns = json_parse.json_parse()
        if not columns:
            sys.exit()
        is_table_has_exist = db.check_tables_exist(columns=columns)
        if is_table_has_exist:
            db.check_columns(columns=columns)
        is_ok, config_path = config_out.output(columns)
        if is_ok:
            file_name = os.path.split(config_path)[1]
            shutil.copy(config_path, os.path.join("/app/statics_log/config", file_name))
    except Exception, e:
        print e

我依旧用crontab运行。

cd to/my/py_file/path && /project_path/.env/bin/python /path/to/py_file

示例:

13 8 1 * * cd bulu-statics/create_config/ && /home/buka/bulu-statics/.env/bin/python /home/buka/bulu-statics/create_config/handler.py >> /app/statics_log/config/create_config.log

3 个答案:

答案 0 :(得分:0)

PyCharm自动将标记为包含源的项目目录添加到PYTHONPATH环境变量中,这就是为什么它在pycharm中工作的原因。在终端上使用

PYTHONPATH=${PWD}/..:${PYTHONPATH} python handler.py

答案 1 :(得分:0)

您可以使用显式相对导入:

from .modules import db, json_parse, config_out

执行此操作的正确方法是将项目转换为适当的Python包,方法是添加setup.py文件,然后使用pip install -e .安装

答案 2 :(得分:0)

可能是因为PyCharm将你的项目文件夹添加到PythonPath,所以你可以在PyCharm中运行你的应用程序。

但是,当你尝试从命令行运行它时,python解释器无法在Python python中找到这些库,所以你需要做的是添加你的python virtualenv python python。

添加python路径有不同的方法,但我建议您遵循:

  1. 准备setup.py您需要指定packagesinstall_requires
  2. 通过development - >以pip install -e /path/to/your-package模式在本地安装您的应用它会在你的python virtualenv中创建一个egg-link,你可以从现在开始在你的本地终端运行你的应用程序;
  3. 用于打包和发布,您可能希望按照https://docs.python.org/2.7/distutils/builtdist.html构建工件 您可以在其他计算机上pip installeasy_install使用该工件。如果需要,您也可以将包裹发布到PyPi