entry_points不会使用pip创建自定义脚本,只能使用Python中的easy_install

时间:2014-02-14 14:16:45

标签: python python-2.7 pip setuptools easy-install

我在python中第一次打包脚本。它可以用作模块和可执行文件,所以我发现我可以使用

entry_points = {
    'console_scripts': [
        'myscript = myscript:main',
    ],
}

在我的setup.py中自动生成用户python-x.x.x/bin目录中的脚本。

我的python脚本以

结尾
if __name__ == '__main__': main()

其中main()解析命令行输入。

我使用以下命令打包:

python setup.py sdist

然后将分布测试为:

easy_install dist/myscript-0.3.2.tar.gz

这会在我的myscript中按预期放置python-2.7.5/bin个可执行文件。

但这不是:

pip install dist/myscript-0.3.2.tar.gz

任何想法为什么?我的目录树看起来像:

Root/
|-- MANIFEST.in
|-- README.rst
|-- dist
|   `-- myscript-0.3.2.tar.gz
|-- myscript.egg-info
|   |-- ...
|-- myscript.py
|-- setup.cfg
|-- setup.py
`-- test
    |-- ...

和我的setup.py大致如下:

import os

from setuptools import setup

def read(*paths):
 """Build a file path from *paths* and return the contents."""
 with open(os.path.join(*paths), 'r') as f:
  return f.read()

setup(
 name='myscript',
 version='0.3.2',
 description='bla',
 long_description=(read('README.rst')),
 url='http://url',
 license='LGPL',
 author='Me',
 author_email='me@me.com',
 py_modules=['myscript'],
 include_package_data=True,
 classifiers=[
  'Development Status :: 5 - Production/Stable',
  'Intended Audience :: Developers',
  'Natural Language :: English',
  'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)',
  'Operating System :: OS Independent',
  'Programming Language :: Python',
  'Programming Language :: Python :: 2',
  'Programming Language :: Python :: 2.7',
  'Topic :: Software Development :: Libraries :: Python Modules',
 ],
 install_requires=['Texttable'],
 entry_points = {
  'console_scripts': [
   'myscript = myscript:main',
  ],
 }
)

3 个答案:

答案 0 :(得分:3)

我有类似的pip install .经验,没有在项目目录中工作。事实证明,pip没有执行所有的setup.py逻辑,因为它假定我的项目的相关性已经满足,因为我的包在sys.path中,其中包含工作目录。我找到了三个解决方法。我可以使用editable或upgrade标志强制它安装所有内容:

pip install --editable . - 可能有效(但取决于本地pip配置)

pip install --upgrade . - 作品

pip install --upgrade-strategy=only-if-needed . - 工作

或者我可以转到另一个工作目录并使用项目目录的绝对路径执行它:

pip install $HOME/src/project_dir

答案 1 :(得分:2)

main功能真的在mypackage包中吗?为此,应在该软件包的__init__.py文件中定义或导入。

如果您的项目结构如下所示:

mypackage/
├── mypackage/
│   ├── __init__.py
│   └── main.py
└── setup.py

然后你需要:

  • mypackage.main:main
  • 中使用setup.py
  • from main import main
  • 中写下__init__.py

答案 2 :(得分:1)

似乎在使用these指令将包上传到PyPI后,pip install myscript确实在我的python bin中放置了一个可执行文件。一定是当地的问题。

相关问题