pythonsetuptools正在从Windows上的路径参数中剥离斜杠

2024-04-26 01:03:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Windows7上安装一个包含setuptools包括console_scripts的包。我正在尝试更改我的PYTHONUSERBASE的值,以安装到带有--user标志的自定义目录中。如果我在PYTHONUSERBASE的值中使用反斜杠,如

set PYTHONUSERBASE=C:\testing

一切正常。但是,如果我用正斜杠,比如

^{pr2}$

包本身安装到正确的位置,但是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


Tags: py路径目录main标志setupscriptstesting
1条回答
网友
1楼 · 发布于 2024-04-26 01:03:27

简而言之,Windows不能很好地处理路径名中的正斜杠(如文档所述here)。避免使用这样的名称设置PYTHONUSERBASE环境变量。在

较长的版本是setuptools直接或通过调用abs path规范化其大部分路径名(在Windows版本的Python上,它将/转换为\)。但是,对于创建脚本时使用的目录名,它不会这样做(请参见在this file中写入脚本)。在

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

如果您从配置文件中读取路径,然后使用该路径设置PYTHONUSERBASE,只需使用操作系统路径.normpath将Linux文件名转换为Windows文件名。这在Linux上很好,因为它不会对斜杠产生任何影响。在

相关问题 更多 >