mit*_*mit 19 python packaging python-2.x
请展示为python 2.x创建python包的简单和最新标准方法
我希望稍后使用pip来安装软件包.
包应该包含一个类:
class hello:
def greet(self):
print "hello"
Run Code Online (Sandbox Code Playgroud)
之后应该可以执行以下操作:
pip install my_package-0.1.1....
Run Code Online (Sandbox Code Playgroud)
然后使用它:
from my_package import hello
h = hello.hello()
h.greet()
Run Code Online (Sandbox Code Playgroud)
我要的是:
我找到了几个howtos,但我仍然不确定这个非常简单和剥离的情况(没有嵌套包,删除所有文件和功能,可以在最简单的情况下省略)将如何处理,这是现代的这样做的方式.
我希望这个问题进入社区维基状态,所以你不会得到任何积分,我会给出足够的时间,并在几天之后标记答案,同时考虑投票和评论.
编辑:
我有一个我要分享的第一个运行示例,我使用了Marius Gedminas的答案.它不包含应该存在的所有内容,但它有效,因此它可以展示技术过程的核心.要添加更多必要部件,请阅读下面的Marius的答案.
目录结构:
MyProject/
setup.py
my_package.py
README.txt
MANIFEST.in
Run Code Online (Sandbox Code Playgroud)
setup.py:
from setuptools.import setup
setup(name='MyProject',
version='0.1',
py_modules=['my_package'])
Run Code Online (Sandbox Code Playgroud)
my_package.py:
class hello:
def greet(self):
print "hello"
Run Code Online (Sandbox Code Playgroud)
MANIFEST.in:
include *.txt
Run Code Online (Sandbox Code Playgroud)
要从此文件夹创建包,请进入MyProject文件夹并运行:
$ python setup.py sdist
Run Code Online (Sandbox Code Playgroud)
这将MyProject-0.1.tar.gz在子文件夹中创建一个文件dist/.将此文件复制到目标计算机上的文件夹中.
在目标计算机上运行此命令,该文件夹包含MyProject-0.1.tar.gz:
sudo pip install MyProject-0.1.tar.gz
Run Code Online (Sandbox Code Playgroud)
现在可能需要在目标计算机上注销并重新登录,因此将找到该程序包.之后,您可以使用python shell在目标机器上测试包:
$ python
>>> import my_package
>>> h = my_package.hello()
>>> h.greet()
hello
>>>
Run Code Online (Sandbox Code Playgroud)
一旦这个工作,请记住添加其他必要的内容,请参阅Marius的答案如下.
Mar*_*nas 32
最简单的单文件包:
MyProject/
setup.py
my_package.py
Run Code Online (Sandbox Code Playgroud)
最简单的setup.py:
from setuptools import setup
setup(name='MyProject',
version='0.1',
author='Your Name',
author_email='your.name@example.com',
license='MIT',
description='Example package that says hello',
py_modules=['my_package'])
Run Code Online (Sandbox Code Playgroud)
接下来你应该添加一个自述文件:
MyProject/
MANIFEST.in
README.rst
setup.py
my_package.py
Run Code Online (Sandbox Code Playgroud)
请注意新文件 - MANIFEST.in.它指定了哪些非Python文件应该包含在源代码分发中:
include *.rst
Run Code Online (Sandbox Code Playgroud)
人们会告诉你"哦,跳过清单,只需将文件添加到源代码控制中,setuptools就会找到它们".忽略这个建议,它太容易出错了.
在Python包索引上使README.rst可供人们在线查看是很有用的.所以改变你的setup.py来做
from setuptools import setup
with open('README.rst') as f:
readme = f.read()
setup(name='MyProject',
...
description='Example package that says hello',
long_description=readme,
...)
Run Code Online (Sandbox Code Playgroud)
使用ReStructuredText标记可以获得更漂亮的页面.使用
python setup.py --long-description | rst2html
Run Code Online (Sandbox Code Playgroud)
尽早捕获ReStructuredText错误.
一个文件不会很快,所以将其更改为一个包(令人困惑的术语警告:Python包在一个带有a的目录中__init__ py,而不是在可分发的自包含存档中):
MyProject/
MANIFEST.in
README.rst
setup.py
my_package/
__init__.py
some_module.py
Run Code Online (Sandbox Code Playgroud)
并将setup.py更改为
from setuptools import setup, find_packages
with open('README.rst') as f:
readme = f.read()
setup(name='MyProject',
version='0.2',
author='Your Name',
author_email='your@email',
license='MIT',
description='Example package that says hello',
long_description=readme,
packages=find_packages())
Run Code Online (Sandbox Code Playgroud)
获取PyPI帐户 - 您只需要执行一次.
要进行发布,请确保setup.py中的版本号是正确的,然后运行
python setup.py sdist register upload
Run Code Online (Sandbox Code Playgroud)
而已.
告诉他们
pip install MyProject
Run Code Online (Sandbox Code Playgroud)
(您在setup.py中指定的同名作为namesetup()的参数)
| 归档时间: |
|
| 查看次数: |
6544 次 |
| 最近记录: |