【问题标题】:Python: run script with relative path from command linePython:从命令行运行具有相对路径的脚本
【发布时间】:2018-05-12 22:15:23
【问题描述】:

TL;DR

Windows 10 上有哪些选项可以从命令行运行由相对路径指定的 python 脚本?可以更改环境变量来这样做吗?如何做到这一点?

我使用的是 Windows 10。当我按照this 安装指南(为 Linux 编写)时,一切都很好,直到我需要在 Windows 上执行以下操作

# From tensorflow/models/research/
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

在 Windows 上,我将两个路径(整个、绝对、路径)添加到 PYTHONPATH。当我执行以下操作时;我看到添加了额外的两条路径。

C:\User\me>    python -c "import sys; print(sys.path)"

但是,如果我创建一个简单的 test.py 脚本

print("Relative path works")

并从命令行运行它:

C:\User\me> python test.py

如果 test.py 文件保存在 C:\User\me\ 中,它可以工作,但如果它保存在 PYTHONPATH 的文件夹中,则不能。

This SO Q&A 这么说

Python 解释器使用 PYTHONPATH。它不一样 Windows 的 PATH 环境变量。您不能将其用作搜索路径 用于在命令行上将文件传递给解释器。

但是我找不到如何实现我所需要的,使用脚本的相对路径从命令行运行它。请注意,使用绝对路径不是一个选项,因为安装指南需要将 2 个文件夹添加到 PYTHONPATH,才能使任务正常工作。

这应该是可能的,但我没有找到任何答案 - Python 3 documentation 描述了使用相对路径运行脚本的命令行选项:

执行脚本中包含的 Python 代码,该代码必须是 引用 Python 的文件系统路径(绝对或相对) 文件...

【问题讨论】:

  • PYTHONPATH 与查找从命令行运行的常规脚本无关。它将目录添加到sys.path 以与import 语句一起使用。它仅与将导入模块作为脚本运行的-m 选项或运行命令行脚本的-c 选项的命令行使用相关。

标签: python windows command-line


【解决方案1】:

安装指南中的这些行旨在在 cd .../tensorflow/models/research/ 之后运行,因此是绝对路径:

# From tensorflow/models/research/
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

您可能需要在 Windows 上执行类似的操作。等效的可能是将库的绝对路径添加到PYTHONPATH 环境变量。

【讨论】:

  • 我应该更清楚 - 我添加了 PYTHONPATH 环境变量的绝对路径。但是如上所述,它仍然不起作用。
【解决方案2】:

我没有对此进行测试,但正如here 中所述, 这个 >>> export PYTHONPATH=$PYTHONPATH:pwd:pwd/slim 应该用作

设置 PYTHONPATH=%PYTHONPATH%;%cd%;%cd%\slim

【讨论】:

  • 适应 Windows 的链接 tensorflow 设置。但是,OP 的问题意味着对 PYTHONPATH 的用途存在深刻的误解。给定的“test.py”脚本只是一个与 tensorflow 无关的 print 调用,OP 似乎错误地认为 Python 会在 sys.path 中搜索此脚本。
  • 正确,test.py 与张量流无关。这只是为了测试我是否可以运行具有相对路径的简单脚本。有没有办法做到这一点?一些环境变量的设置可以实现吗?
  • 有两种选择:1)以[开发模式](packaging.python.org/tutorials/distributing-packages/…)安装目录。 2) 执行时 >>> python scriptName.py... 如果您提供目录而不是文件,则该目录将添加到 sys.path 和 --main--.py(使用 - 符号代替 _)文件是执行为 __main__>>> python dirName ...如果您的目录中有一个名为 --main-- .py 的脚本(使用 - 符号代替 _),则应该可以完成这项工作。参考 [这里] (docs.python.org/3/using/cmdline.html)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
相关资源
最近更新 更多