2017-02-11 80 views
12

我想创建一个我自己的包。该包非常简单,它有一个python模块和一个bash脚本。我想他们都安装在/usr/local/bin下,以便它们可以直接执行。pip没有安装entry_points作为可执行文件

这是我的setup.py文件:

from setuptools import setup 

setup(
    name='deploy', 
    . 
    . 
    . 
    install_requires=['pyyaml', 'cot', 'jsonschema'], 
    entry_points={ 
     'console_scripts': [ 
      'cloud_config = cloud_config:main', 
     ], 
    }, 
    scripts=['deploy.sh'], 
) 

下面是摘自输出pip install ...

running install_scripts 
    copying build/scripts-2.7/deploy.sh -> /usr/local/lib/python2.7.10/bin 
    changing mode of /usr/local/lib/python2.7.10/bin/deploy.sh to 755 
    Installing cloud_config script to /usr/local/lib/python2.7.10/bin 

有了这个,我不能够调用无论是Python或直接在bash脚本。

任何想法?

编辑:我正在运行pipUbuntu 16.04.1机器上。试图在Ubuntu 14.04机器上安装相同的包并且行为与预期的相同。 cloud_config.pydeploy.sh都可以安装到/usr/local/bin,我可以从系统的任何地方调用它们。

+2

Ubuntu大幅修补点子;我并不感到惊讶,他们也改变了行为。 –

+0

这是荒谬的@MartijnPieters。如何创建一个可在所有平台上正确安装的软件包? – ronakg

+0

我刚刚尝试创建一个基于你的'setup.py'的包,并部署来清理Ubuntu 16.04 Vagrant框 - 一切正常。如果您想提供更多信息,可能有助于重现问题。也许有版本的东西?你使用哪个版本的setuptools进行组装?目标机器上的pip和setuptools是什么? – Timur

回答

1

最后我得到它的工作。我必须删除apt安装的pip软件包。 https://pip.pypa.io/en/stable/installing/ -

sudo apt remove python-pip 

然后再根据他们的网站上说明安装点子。

wget https://bootstrap.pypa.io/get-pip.py 
sudo python get-pip.py 

看起来像Ubuntu的默认存储库中的pip与pypi发布的不同。

0

尝试:

pip install --install-option="--prefix=$PREFIX_PATH" package_name 

例如

pip install --install-option="--prefix=/usr/local/bin" pyFooBar 
+0

'entry_points - > console_scripts'下的条目是否应该安装在'PATH'中,以便它们可以从任何地方调用? – ronakg

+0

根据python包装的这个文档 - http://python-packaging.readthedocs.io/en/latest/command-line-scripts.html – ronakg

2

两个选项,我能想到的,首先,检查是点子在正确的地方指指点点。因此,尝试:

which python 

雷说:

/usr/bin/python 

你的将是不同的,相应地更改到 路径然后确保路径是正确设置,所以:

export PATH=/usr/bin/python:${PATH} 

重新安装点子,然后再试一次。 做不到这一点,解决方法可能是在这种情况下不使用PIP和尝试:

python setup.py install 

将使用默认的Python路径(未PIP),并应​​安装到:

/usr/local/bin 
+0

矿也说'/ usr/bin/python'。看到我的答案,看看有什么工作。我仍然不知道为什么默认点不起作用。 – ronakg

相关问题