在Windows上使`#!/ usr / bin / env python`工作


14

我在MSYS提供的Windows上使用Bash。

我尝试运行带有shebang的Python文件#!/usr/bin/env python,但收到以下错误消息:

/usr/bin/env: python: No such file or directory

我该怎么做才能使这项工作?

我知道我可以通过使用加上后缀来启动Python文件python,但是我希望它也能在没有后缀的情况下工作。

Answers:


8

使用安装Python的正确路径,例如:

#!c:/Python/python.exe

如果您的系统具有类Unix路径支持(我对MSYS不熟悉),则始终可以输入python可执行文件的路径,即的输出which python


2
或者,您可以使用envasker那样做。
伊格纳西奥·巴斯克斯

我无法更改shebang,它是一个项目的一部分,该项目涉及在Linux和Mac上工作的其他程序员。
Ram Rachum

@RamRachum which envand which python和的输出是type python什么?
丹尼尔·贝克


0

从外壳运行时会发生什么:

$ /usr/bin/env python

..?

如果启动交互式python会话,则可以找到python。(您也可以简单地运行:)type python。如果它显示“无此文件或目录”,则说明python您的PATH中找不到该文件或目录。查看是否可以调整以下内容以解决问题(path / to / python中的空格可能会引起问题):

$ export PATH=$PATH:/path/to/python
$ /usr/bin/env python


0

Windows 10的最新版本支持安装Linux子系统。如果从那里运行,路径应该是正确的。

如果您可以以这种方式运行它,那么它应该是一个可行的解决方案。


0

问题的根源在于,在shebangs空间被解释为一个可执行文件提供额外的参数,所以C:\Program Files\Python\python.exe被视为C:\Program给定Files\Python\python.exe作为参数。

最好的解决方案是:尽管Windows 确实可以破坏cmd.exe和Powershell和其他工具中的内容,但Windows在$HOME目录和Program Files其他位置都喜欢空格,它是:

安装Python C:\Python并将C:\Python其所在的文件夹python.exe和其中的Scripts目录添加到PATH系统或用户级别的环境变量中。

如果你需要的Python 2.7.x和3.x共存,它们安装到C:\Python27C:\Python36C:\Python37,并重新命名python.exepython2.exepython36.exepython37.exe,等每个这些文件夹和它们的添加Scripts文件夹到PATH。您可能要确定要成为哪个Python 3版本的“默认”,并在该文件夹中python3.exe进行复制以处理使用的任何脚本!#/usr/bin/env python3

如果您的用户主目录中有空格,则使用pip install --user somepackage语法可能还会遇到问题。将--user默认为您的主目录的空间,而将绊倒的事情在这种情况下也是如此。这里介绍解决方法但归结为将PYTHONUSERBASE导出到您的环境。

export PYTHONUSERBASE=/myappenv
pip install --user SomePackage

或在Windows(Powershell)中:

$env:PYTHONUSERBASE='C:\PythonPkgs'
pip install --user SomePackage
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.