【问题标题】:Run python script from terminal with module in different directory使用不同目录中的模块从终端运行 python 脚本
【发布时间】:2019-12-31 11:59:36
【问题描述】:

所以我有以下api架构

API >
       -------- data
                    |_ __init__.py
                    |_ data.py
                    |_ data.csv
       -------- model
                    |_ __init__.py
                    |_ model.py
       -------- modules.py
       -------- app.py

model.pydata.py 都使用来自 modules.py 的模块通过 from modules import * 这在从 PyCharm 启动所有内容时都可以正常工作。
但是,当尝试使用主目录中的 shell 脚本运行它时 API

cd data && python data.py && cd ..
cd model && python model.py && cd ..

我得到错误: ModuleNotFoundError: No module named 'modules'
如何正确导入模块以在 PyCharm 和命令行上运行?

【问题讨论】:

  • 我认为 pycharm 正在运行工作目录中的所有内容(我假设是 API),如果你运行 python data/data.pypython model/model.py 会怎样?
  • @mucio 同样的问题

标签: python shell command-line


【解决方案1】:

将此代码添加到 data.py 和 model.py 分别运行它们时,它将执行此代码以导入所需的模块,在 pycharm 中由于 __init__.py 文件是作为包导入的

 if __name__ == "__main__": 
     from ... import modules

稍后您可以将模块中的方法/变量用作 modules.methods() modules.variable 等,

【讨论】:

  • 这是将它们作为主要运行,这不是问题。如果我在开头或之后导入if __name__ == "__main__": ,它实际上并没有改变任何东西
  • 我给出了一个可以在 pycharm 和外部运行的通用代码,如果你可以有不同的 data.py 文件,你可以直接添加“from ... import modules”而不是“from modules导入 *"
【解决方案2】:

我只需要将主目录添加到 data.pymodel.py 上的 python 路径:

import sys
sys.path.append('../')

【讨论】:

    【解决方案3】:

    我参加聚会有点晚了,但我会为下一位从 Google 来到这里的用户发布对我有用的内容。 实际上,可以修改@mobelahcen 编写的每个Python 脚本中的sys.path 变量。但是当你在大型项目中有多个脚本时,就不太方便了。

    然后,在 Linux/Unix 中,想法是修改环境变量 PYTHONPATH 例如:

    export PYTHONPATH=$PYTHONPATH:/home/user/user_defined_module
    

    可以将其添加到 shell 在启动时读取的文件中,例如,.bashrc

    在Python中,当执行import user_module语句时,会在库安装默认路径和PYTHONPATH中列出的目录中搜索模块。

    【讨论】:

      猜你喜欢
      • 2019-04-25
      • 2016-08-01
      • 2020-12-07
      • 1970-01-01
      • 2017-06-14
      • 2011-02-17
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多