python 的基本用法

时间:2025-04-12 10:35:27

参考:/p/9a5e7c935273

from setuptools import setup, find_packages

# 最主要的方法就是这个⬇️,给它加上不同的参数
setup(**setup_args)

# argument example:
setup(
	name='greeting_pkg',		# 在 pip 中注册的名字(如果我们将这个 package 分享到 PyPI,必须保证这个名字与 PyPI 中已有 package 注册的名字不重复)
    packages=find_packages()	# 也是setuptools里的方法,作用先不管
    version='0.1.0'				# 不写的话pip list出来会显示默认的0.0.0
    install_requires=[          # 这个package需要依赖的其他package,写在这里会自动安装
        'PyYAML',
        'pandas==0.23.3',		# 指定依赖版本的写法
        'numpy>=1.14.5',
    ],
    extras_require={       		# 可选的依赖,可以通过"pip install -e .[interactive]"来安装
        'interactive': ['matplotlib>=2.2.0,<3.0.0', 'jupyter']
    }
)

在命令行中执行 module 中的函数

如果我们希望 module 中的函数不仅仅只是被其他 python 程序通过 import 调用,还可以直接在命令行中执行,那么可以做如下修改:(设置参数entry_points里的’console_scripts’)

# greeting_module.py
import pyjokes

def greeting_func(name):
    print("Hello,", name)
    print("Here is a joke for you:\n", pyjokes.get_joke())

def main():
    import sys
    arg = sys.argv[1]
    greeting_func(arg)
#  
from setuptools import setup, find_packages

setup(
	# ...,
    entry_points={       # 设置了在命令行中如何使用greeting_module中的main函数
        'console_scripts': [
            'greeting=greeting_pkg.greeting_module:main'	# <command>=<package>.<module>:<function>
        ]
    }
)

执行:

$ greeting "De Gang"
Hello, De Gang
Here is a joke for you:
 3 Database Admins walked into a NoSQL bar. A little while later they walked out because they couldn’t find a table.

package_data

这个参数是用来include一些非.py文件

  • 例子:
    Suppose we have a in our project, which we place in exampleproject/data/.
    If we want to include this in our package, we must use the package_data argument of setup:
setup(
    # ...,
    package_data={
    	'exampleproject': [		# 这个是sub-package的名字
   			'data/'
   		]
    }
)

这个里面也是用来include一些non-python文件。
用法:
上例中的exampleproject/data/,如果要通过来打包进去:

include exampleproject/data/schema.json

它的效果可以和package_data一样,但是这两者在逻辑上是用来include不同作用的文件
我的理解:manifest包含一些、这些“项目结构”用的文件,package_data包含的是代码里实际用到的文件,如数据、文本等。
(下面的解释是抄来的)
MANIFEST 控制 sdist 包含的内容, package_data控制bdist包含的内容。
用来给源文件打包, 里面包含许多额外的信息, 比如测试文件之类的。

package_data用于指定安装时加入的额外的文件, 不需要再中重复定义, 源文件打包的时候回自动包含这里面的文件。

以下都是描述性参数:

from setuptools import setup, find_packages

setup(
   ...
   # metadata to display on PyPI
    author="Me",
    author_email="me@",
    description="This is an Example Package",
    keywords="hello world example examples",
    url="/HelloWorld/",   # project home page, if any
    project_urls={
        "Documentation": "/HelloWorld/",
        "Source Code": "/HelloWorld/",
    },
    classifiers=[
        'License :: OSI Approved :: Python Software Foundation License'
    ]
)