我试图在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
简而言之,Windows不能很好地处理路径名中的正斜杠(如文档所述here)。避免使用这样的名称设置PYTHONUSERBASE环境变量。在
较长的版本是setuptools直接或通过调用abs path规范化其大部分路径名(在Windows版本的Python上,它将/转换为\)。但是,对于创建脚本时使用的目录名,它不会这样做(请参见在this file中写入脚本)。在
因此,您可以看到脚本和其他文件之间的不一致行为。解决方法是通过避免路径中的正斜杠来避免规范化文件。在
如果您从配置文件中读取路径,然后使用该路径设置PYTHONUSERBASE,只需使用操作系统路径.normpath将Linux文件名转换为Windows文件名。这在Linux上很好,因为它不会对斜杠产生任何影响。在
相关问题 更多 >
编程相关推荐