【发布时间】:2015-10-16 05:45:38
【问题描述】:
我正在尝试在 Windows 7 上安装带有 setuptools 的软件包,包括 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
【问题讨论】:
-
我不知道为什么 setuptools 会这样做,但你也许可以在你的 setup 函数中做一些事情,比如
if 'PYTHONUSERBASE' in os.environ: os.environ['PYTHONUSERBASE'] = os.environ['PYTHONUSERBASE'].replace('/', os.sep) -
@PatrickMaupin 我正在考虑类似的事情......我实际上使用 SCons 来构建真正的项目,所以我试图看看我是否也可以在 SConstruct 文件中处理它。我认为使用
os.path.normpath可能会更好,而不是明确替换斜线。谢谢! -
这是一个计划。我忘记 normpath() 会这样做,因为它是特定于 Windows 的行为(在 Linux 上,它不会将反斜杠更改为斜杠)而且我不使用 Windows。祝你好运!
标签: python setuptools