【问题标题】:Can a module be run with option -m from another folder which is not its parent?可以使用选项 -m 从另一个不是其父文件夹的模块运行模块吗?
【发布时间】:2023-03-30 11:45:01
【问题描述】:

在运行 Python 模块(在包内)时,我总是使用父文件夹中的 -m 选项。

假设我们有以下文件目录:

folder-that-contains-root-project-folder/
    root-project-folder/
        package/
            __init__.py
            module.py
            venv/

我总是从文件夹 root-project-folderpython -m package.module 运行 module.py,它可以工作。

但是我如何从 folder-that-contains-root-project-folder 运行 module.py?到目前为止我尝试的是python -m root-project-folder/package.module,但它不起作用。

编辑:folder-that-contains-root-project-folder运行时的错误是:

/home/eduardo/Desktop/folder-that-contains-root-project-folder/root-project-folder/venv/bin/python:
Error while finding module specification for
'root-project-folder/package.module' (ModuleNotFoundError: No module
named 'root-project-folder/package')

PD:我在 Ubuntu 上使用 bash

【问题讨论】:

  • “它不起作用”是什么意思?运行该命令后的输出是什么?
  • edit您的问题而不是发表评论。

标签: python bash python-module


【解决方案1】:

这里有两种解决方案:

  1. 运行python -m root-project-folder.package.module。基本上,您将rood-project-folder 视为一个模块并使用. 来分隔文件夹,而不是像在Python 代码中那样使用/

  2. root-project-folder 添加到PYTHONPATH。现在您可以像往常一样从计算机上的任何文件夹运行python -m package.module

【讨论】:

  • 它可以工作,但是当执行的模块有来自另一个包的另一个依赖项(导入的模块)时,它就不起作用了。
  • @EduardoG 您尝试了哪个选项?
【解决方案2】:
  1. 你需要在你的包中使用 toml 或 setup.py 来生成一个 python 包。你可以在这里阅读更多:https://packaging.python.org/tutorials/packaging-projects/

  2. 一旦你正确构建了包文件夹,你就可以运行命令 pip install -e . 从文件夹中安装你的包

  3. 您的包已准备好导入/部署

  4. 如何使用 PyPi 是另一个讨论主题

【讨论】:

  • 这里只说明如何创建一个包,然后将它安装到另一个项目中。这并没有说明仅从另一个文件夹运行代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 2019-12-22
相关资源
最近更新 更多