命令在文件路径上有效,但在根目录下无效

时间:2019-09-01 04:08:01

标签: python-3.x

我仍然是bash编程的新手,但尝试使用少量脚本运行程序。将问题减少到错误消息中,我有

cd /full/path/to/program
python3 -m krop

该命令在实际文件夹为/ full / path / to / program时起作用

但是,如果我从根目录运行相同的命令,将无法正常工作。

cd /another/path
python3 -m /full/path/to/program/krop
/usr/bin/python3: Error while finding module specification for '/full/path/to/program/krop' 
(ModuleNotFoundError: No module named 'krop-0')

我尝试了很多变体,但始终输出相同但有错误。我不知道为什么库“ python3”会在文件名的末尾添加“ -0”。

我应该怎么做才能从根目录运行程序?

2 个答案:

答案 0 :(得分:0)

import命令需要一个模块名称,类似于您在Python程序中使用./directory的语法。因此,如果您的模块位于directory中,并且python -m directory.krop是有效的python模块,则可以执行python -m krop

但是您不能从文件系统根目录索引python模块。您要么必须使bash脚本在良好目录中运行,要么进行本地导入。否则,您必须在系统范围内打包和安装模块,以进行全局导入,该导入将通过=+从任何地方调用。

有关打包和安装模块的更多信息:https://packaging.python.org/tutorials/packaging-projects/

答案 1 :(得分:0)

问题解决了!,

这是管理python导入路径的问题,正如@hiroprotagonist回答的那样。包含python将用于搜索模块的所有目录的列表在名为sys.path的变量中可用。 因此,如果有人想通过python的命令从不同于“ pwd”目录的目录中运行程序(根据python帮助,称为“库模块为脚本”),则应在命令行中编写:

export PYTHONPATH='/full/path/to/program/'
python3 -c "import sys; print(sys.path)"
python3 -m krop

第二行实际上是在屏幕上打印,但是第一行是唯一必需的(导出PYTHONPATH)。

感谢您的关键字和帮助!

Ps。可能应该将问题标题编辑为“使用python命令从Linux上的命令行运行程序的问题”或类似的问题。

参考:python --help:)