我仍然是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”。
我应该怎么做才能从根目录运行程序?
答案 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:)