我在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',
],
}
)
答案 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中放置了一个可执行文件。一定是当地的问题。