我一直在为工作中的简单任务制作Python脚本,从来没有真正打扰包装它们以供其他人使用 . 现在我被分配为REST API制作Python包装器 . 我完全不知道如何开始,我需要帮助 .
What I have:
(只是想尽可能具体)我已经准备好virtualenv,它也是up in github,python的.gitignore文件也是,加上,requests library用于与REST API进行交互 . 而已 .
这是当前目录树
.
├── bin
│ └── /the usual stuff/
├── include
│ └── /the usual stuff/
├── lib
│ └── python2.7
│ └── /the usual stuff/
├── local
│ └── /the usual stuff/
└── README.md
27 directories, 280 files
我甚至不知道把.py文件放到哪里,如果我做的话 .
What I wanted to do:
使用“pip install ...”安装python模块
如果可能的话,我想要编写Python模块的一般步骤 .
6 回答
模块是包含Python定义和语句的文件 . 文件名是带有后缀
.py
的模块名称创建
hello.py
然后编写以下函数作为其内容:然后你可以导入
hello
:要将许多
.py
文件分组,请将它们放在一个文件夹中 . 任何带有__init__.py
的文件夹都被python视为模块,您可以将它们称为包您可以通常的方式在模块上使用import语句 .
有关更多信息,请参阅6.4. Packages .
Python 3 - UPDATED 18th November 2015
找到有用的答案,但希望根据我自己的经验扩展几个点,以造福他人 .
Module: 模块是包含Python定义和语句的文件 . 文件名是附加后缀.py的模块名称 .
Module Example :假设我们在当前目录中有一个python脚本,这里我称之为mymodule.py
文件mymodule.py包含以下代码:
如果我们从当前目录运行python3解释器,我们可以通过以下不同方式导入和运行myfunc函数(通常只选择以下之一):
好的,这很容易 .
现在假设您需要将此模块放入其自己的专用文件夹中以提供模块命名空间,而不是仅从当前工作目录中临时运行它 . 这是值得解释 package 概念的地方 .
Package :包是一种使用“点模块名称”构建Python模块命名空间的方法 . 例如,模块名称AB在名为A的包中指定名为B的子模块 . 就像使用模块保存不同模块的作者不必担心彼此的全局变量名一样,使用点模块名称可以保存作者NumPy或Python Imaging Library等多模块软件包不必担心彼此的模块名称 .
Package Example :我们现在假设我们有以下文件夹和文件 . 这里, mymodule.py 与之前相同, init.py 是一个空文件:
需要__init__.py文件才能使Python将目录视为包含包 . 有关详细信息,请参阅稍后提供的模块文档链接 .
我们当前的工作目录比名为 mypackage 的普通文件夹高一级
如果我们现在运行python3解释器,我们可以通过以下不同的方式导入并运行包含所需函数myfunc的模块 mymodule.py (通常只选择以下之一):
假设Python 3,有以下优秀文档:Modules
关于包和模块的命名约定,PEP-0008中给出了一般指导原则 - 请参阅Package and Module Names
模块应该有简短的全小写名称 . 如果提高可读性,可以在模块名称中使用下划线 . Python包也应该有简短的全小写名称,但不鼓励使用下划线 .
既然没有人确实涵盖OP的这个问题:
这是一个绝对最小的示例,显示了使用
setuptools
和twine
准备包并将包上传到PyPI的基本步骤 .This is by no means a substitute for reading at least the tutorial, there is much more to it than covered in this very basic example.
这里的其他答案已经涵盖了创建包本身,所以让我们假设我们已经涵盖了这一步,我们的项目结构如下:
为了使用
setuptools
进行打包,我们需要添加一个文件setup.py
,这将进入我们项目的根文件夹:我们至少指定了包的元数据,
setup.py
将如下所示:由于我们已设置
license='MIT'
,因此我们在项目中包含一个副本LICENCE.txt
,以及reStructuredText中的自述文件README.rst
:此时,我们已准备好使用
setuptools
开始打包,如果我们尚未安装它,我们可以使用pip
安装它:为了做到这一点并创建
source distribution
,在我们的项目根文件夹中,我们从命令行调用setup.py
,指定我们想sdist
:这将创建我们的分发包和egg-info,并产生这样的文件夹结构,我们的包在
dist
中:此时,我们有一个可以使用
pip
安装的软件包,因此从我们的项目根目录开始(假设您拥有此示例中的所有命名):如果一切顺利,我们现在可以打开一个Python解释器,我会说在项目目录之外的某处,以避免任何混淆,并尝试使用我们闪亮的新包:
现在我们已确认包安装和工作,我们可以将其上传到PyPI .
由于我们不想通过实验污染实时存储库,因此我们为testing repository创建了一个帐户,并为上传过程安装了
twine
:现在我们差不多了,创建了我们的帐户,我们只是告诉
twine
上传我们的包,它会要求我们的凭据并将我们的包上传到指定的存储库:我们现在可以在PyPI测试存储库上登录我们的帐户,并对我们刚刚上传的软件包感到惊讶,然后使用
pip
获取它:我们可以看到,基本过程并不复杂 . 正如我之前所说的那样,它还有很多内容,所以请继续前进read the tutorial以获得更深入的解释 .
一旦定义了所选命令,就可以将保存的文件拖放到python程序文件中的Lib文件夹中 .
创建一个名为“hello.py”的文件
如果您使用的是Python 2.x.
如果您使用的是Python 3.x.
运行该文件 . 然后,您可以尝试以下方法:
如果你想要一点点努力,你可以使用以下内容:
如果您使用的是Python 2.x.
如果您使用的是Python 3.x.
请参阅define旁边的括号中的一个?这很重要 . 它是您可以在定义中使用的那个 .
文本 - 当您希望程序说出您想要的内容时,可以使用它 . 根据它的名字,它是文字 . 我希望你知道文字是什么意思 . 它的意思是“单词”或“句子” .
运行该文件 . 然后,如果您使用的是Python 3.x,则可以尝试以下操作:
对于Python 2.x - 我猜Python 3是一样的吗?不知道 . 如果我在Python 2.x上犯了错误,请纠正我(我知道Python 2,但我使用的是Python 3)
I created a project to easily initiate a project skeleton from scratch . https://github.com/MacHu-GWU/pygitrepo-project .
你可以创建一个测试项目,比方说,
learn_creating_py_package
.You can learn what component you should have for different purpose like :
创建virtualenv
安装自己
运行unittest
运行代码覆盖率
构建文档
部署文档
在不同的python版本中运行unittest
部署到PYPI
使用
pygitrepo
的好处是那些乏味的东西会自动创建并适应你的package_name
,project_name
,github_account
,document host service
,windows or macos or linux
.这是一个学习像专业人士一样开发python项目的好地方 .
希望这可以帮助 .
谢谢 .