这是我的项目结构。我在我的项目中使用virtualenv,但是当我运行它时,它有一个ImportError.I使用 Mac 。
但我可以成功运行它使用Pycharm
所以如何通过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
答案 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路径有不同的方法,但我建议您遵循:
setup.py
您需要指定packages
和install_requires
。 development
- >以pip install -e /path/to/your-package
模式在本地安装您的应用它会在你的python virtualenv中创建一个egg-link,你可以从现在开始在你的本地终端运行你的应用程序; pip install
或easy_install
使用该工件。如果需要,您也可以将包裹发布到PyPi。