Python setuptools 正在从 Windows 上的路径参数中去除斜线
Python setuptools is stripping slashes from path arguments on Windows
我正在尝试安装 setuptools
的软件包,其中包括 Windows 上的 console_scripts
7。我正在尝试更改 PYTHONUSERBASE
的值以安装进入带有 --user
标志的自定义目录。如果我在 PYTHONUSERBASE
的值中使用反斜杠,如
set PYTHONUSERBASE=C:\testing
一切正常。但是,如果我使用正斜杠,如
set PYTHONUSERBASE=C:/testing
包本身安装到正确的位置,但是 console_scripts
(并且只有 console_scripts
)安装到 C:testing\Scripts
。显然,当存在正斜杠时,setuptools
将路径视为仅针对 console_scripts
的相对路径 。在我的真实包中,我正在从配置文件中读取值,所以我真的不想处理路径分隔符的规范化,因为它也需要在 Linux 上工作。为了测试,我有一个结构为
的包
|-- setup.py
|-- foobar\
|---- __init__.py
|---- __main__.py
__main__.py
中的代码是
def main(): print('This is the main function')
和 setup.py
看起来像:
from setuptools import setup
setup(
name='foobar',
version='1.0.0',
packages=['foobar'],
entry_points={
'console_scripts': [
'foobar=foobar.__main__:main',
],
},
)
为什么 setuptools
删除了路径中的第一个正斜杠,我该如何解决?我认为这个问题与我的问题有关,但我认为它没有解决问题:Python os.path.join on Windows
简短的回答是 Windows 不能很好地与路径名中的正斜杠一起使用 - 如文档 here 所示。避免使用这样的名称设置 PYTHONUSERBASE 环境变量。
较长的版本是 setuptools 直接或通过调用 abs 路径规范化其大部分路径名(在 Python 的 Windows 版本上将 / 转换为 \)。但是,它不会为创建脚本时使用的目录名称这样做(请参阅 this file 中的 write_script)。
因此您看到脚本和其他文件之间的行为不一致。解决方法是通过避免路径中的正斜杠来避免需要规范化文件。
如果您从配置文件中读取路径,然后使用它来设置 PYTHONUSERBASE,只需使用 os.path.normpath 将文件名从 Linux 转换为 Windows。这在 Linux 上没问题,因为它对斜杠没有影响。
我正在尝试安装 setuptools
的软件包,其中包括 Windows 上的 console_scripts
7。我正在尝试更改 PYTHONUSERBASE
的值以安装进入带有 --user
标志的自定义目录。如果我在 PYTHONUSERBASE
的值中使用反斜杠,如
set PYTHONUSERBASE=C:\testing
一切正常。但是,如果我使用正斜杠,如
set PYTHONUSERBASE=C:/testing
包本身安装到正确的位置,但是 console_scripts
(并且只有 console_scripts
)安装到 C:testing\Scripts
。显然,当存在正斜杠时,setuptools
将路径视为仅针对 console_scripts
的相对路径 。在我的真实包中,我正在从配置文件中读取值,所以我真的不想处理路径分隔符的规范化,因为它也需要在 Linux 上工作。为了测试,我有一个结构为
|-- setup.py
|-- foobar\
|---- __init__.py
|---- __main__.py
__main__.py
中的代码是
def main(): print('This is the main function')
和 setup.py
看起来像:
from setuptools import setup
setup(
name='foobar',
version='1.0.0',
packages=['foobar'],
entry_points={
'console_scripts': [
'foobar=foobar.__main__:main',
],
},
)
为什么 setuptools
删除了路径中的第一个正斜杠,我该如何解决?我认为这个问题与我的问题有关,但我认为它没有解决问题:Python os.path.join on Windows
简短的回答是 Windows 不能很好地与路径名中的正斜杠一起使用 - 如文档 here 所示。避免使用这样的名称设置 PYTHONUSERBASE 环境变量。
较长的版本是 setuptools 直接或通过调用 abs 路径规范化其大部分路径名(在 Python 的 Windows 版本上将 / 转换为 \)。但是,它不会为创建脚本时使用的目录名称这样做(请参阅 this file 中的 write_script)。
因此您看到脚本和其他文件之间的行为不一致。解决方法是通过避免路径中的正斜杠来避免需要规范化文件。
如果您从配置文件中读取路径,然后使用它来设置 PYTHONUSERBASE,只需使用 os.path.normpath 将文件名从 Linux 转换为 Windows。这在 Linux 上没问题,因为它对斜杠没有影响。