gpt4 book ai didi

Python setuptools 正在从 Windows 上的路径参数中删除斜杠

转载 作者:太空狗 更新时间:2023-10-29 20:25:23 25 4
gpt4 key购买 nike

我正在尝试使用 setuptools 在 Windows 7 上安装一个包,包括 console_scripts。我正在尝试更改我的 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 路径规范化其大部分路径名(在 Windows 版本的 Python 上将/转换为\)。但是,它不会为创建脚本时使用的目录名这样做(请参阅 this file 中的 write_script)。

因此,您会看到脚本和其他文件之间的行为不一致。解决方法是通过避免路径中的正斜杠来避免需要规范化文件。

如果您从配置文件中读取路径,然后使用它来设置 PYTHONUSERBASE,只需使用 os.path.normpath 将 Linux 文件名转换为 Windows 文件名。这在 Linux 上很好,因为它不会影响斜杠。

关于Python setuptools 正在从 Windows 上的路径参数中删除斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31629398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com