使用Python Windows Launcher时,是否有任何方法可以防止必须键入完整路径?

使用Python Windows Launcher时,是否有任何方法可以防止必须键入完整路径?,python,windows,python-3.x,Python,Windows,Python 3.x,在Windows 8中,我经常使用Python Windows启动器,如 py C:/long/long/long/long/long/path/to/prog.py ... 是否有任何方法可以设置一些环境设置,例如PATH或PYTHONPATH等,以防止必须键入到prog.py的完整路径 根据我的基本知识/研究,PATH只对命令行的py部分有帮助,而PYTHONPATH只对prog.py中的导入有帮助,那么我如何处理prog.py本身的路径呢 注: 我不能修改代码,甚至不能修改“sheba

在Windows 8中,我经常使用Python Windows启动器,如

py C:/long/long/long/long/long/path/to/prog.py ...
是否有任何方法可以设置一些环境设置,例如PATH或PYTHONPATH等,以防止必须键入到
prog.py
的完整路径

根据我的基本知识/研究,PATH只对命令行的
py
部分有帮助,而PYTHONPATH只对
prog.py
中的导入有帮助,那么我如何处理
prog.py
本身的路径呢

注:

  • 我不能修改代码,甚至不能修改“shebang”行,因为它需要在其他平台上工作
  • 我无法cd到包含要运行它们的程序的目录,因为这些程序将根据它们运行的目录执行某些操作(它们将修改它们运行的目录中的文件)
  • 我知道,如果我将
    .py
    扩展与Python Windows启动器关联,那么我可以将
    prog.py
    作为命令行中的第一项运行,并因此使用PATH,但目前我的
    .py
    扩展与我最喜欢的编辑器关联,如果可能,我希望保持这种方式(因此我可以双击Windows资源管理器中的任何Python文件并对其进行编辑)。
    • 但是,如果有人建议一个解决方案,我可以将Windows资源管理器与命令行进行不同的关联,那么这可能是一个潜在的解决方案!(即,在Windows资源管理器中,
      .py
      通过编辑器打开,而在命令行上,
      .py
      通过Python Windows Launcher运行)

    • 回答我自己的问题:事实上,我太傻了。我可以为每个程序路径设置一个变量(只有几个程序路径),即..
      prog=C:/long/path/to/prog.py
      ,然后执行
      py%prog%…
      。我想我找到了一个对我自己的问题可以接受的答案

      更新:我刚刚发现了更好的东西。我能做到

      doskey prog=py C:/long/path/to/prog.py $*
      
      然后简单地
      prog…


      现在,我只需要做一些疯狂的事情,将doskey命令放入一个文件,该文件将在每次启动控制台时运行,如下所述:

      将您的长路径添加到
      PYTHONPATH
      ,然后像这样调用您的程序:

      python -m prog
      

      Python将搜索名为
      prog
      的模块,然后将其作为主模块运行。

      您能不能将
      cd
      放入
      C:/long/long/long/long/long/path/to/
      并运行
      py prog.py
      ?我不完全确定问题出在哪里。@eryksun对不起,我应该注意到我的.py文件扩展名与我的fav相关orite编辑器,我希望保持这种方式。(我将用此注释编辑问题。)@Blender很抱歉,程序需要在其他目录中运行,因为它根据运行位置执行操作。我还要将此添加到主要问题中。从shell命令行运行文件和在GUI中双击都会执行默认动词,通常是
      打开
      。脚本的默认操作应该是要执行它。要进行编辑,您可以在右键单击菜单中添加一个命令。否则,您的生活会变得很困难,但我们可能可以使用批处理文件来解决这个问题,该批处理文件在
      where prog.py
      的输出上循环,以获得脚本的完整路径。下面是一个在命令行上运行的简单测试,
      For/f“delims=“%a in('where/f prog.py')do@py%a
      。这将运行当前目录和
      路径中找到的每个prog.py。嘿,这很有效!这比我找到的解决方案好得多,因为它是通用的。(我找到的解决方案适合我,因为我只有几个路径可以硬编码。)这太棒了。尽管如此,我还是注意到了一个问题。如果
      prog.py
      有一个指定python3的shebang行,那么运行
      py path/to/prog.py
      会自动选择python3,因为Python Windows启动器
      py
      会识别shebang行。但是,如果我以
      py-m prog
      的形式运行它,那么
      py
      将忽略shebang行,因此在默认情况下在python2中运行
      prog.py
      。我最终不得不运行
      py-3-m prog
      。这不是一个交易破坏者,但我想知道是否有更好的解决方案来解决这个问题?我不知道。我的windows机器上只有python 3。对于linux,我只是明确地命名了我想要运行的程序使用.ie.
      python3-m prog的程序
      。大多数linux发行版将python2和python3作为各自版本的python.FYI的别名安装,doskey别名在控制台中实现,即conhost.exe(不是cmd.exe),基于在输入行开始处匹配别名。它们不能一般用作命令,即不在批处理文件中,也不能通过管道传输到(例如,
      echo input | prog
      )。