如何从零开始学Python:(7)如何解决发布和上传代码过程中遇到的问题?
一、发布的流程
1、首先为模块创建一个文件夹,且文件夹里包含即将发布的模块代码文件。建议:文件夹命名为英文,如nester。
2、在文件夹中创建一个发布文件,命名为“setup.py”,包含有关发布的元数据,并在文件中编辑以下代码:
from distutils.core import setup
setup(
name='nester',
version='1.0.0',
py_modules=['nester'],
author='admin',
author_email='admin@qq.com',
url='http://www.headfirstlabs.com',
description='A simple printer of nestedlistds',
)
其中,命令from distutils.core import setup,是指从Python发布工具中导入“setup”函数,括号中均为setup函数的参数名,其中author、author_email、url和description,可以自由设定。注意:发布文件中,setup函数和参数名是固定的。
3、构建一个发布文件。根据《Head First Python(中文版)》书中的步骤:1)首先在nester文件夹中打开一个终端窗口。
打开终端窗口的方法:之前在检查Python安装的版本的时候跟大家说过,通过输入cmd打开。但是每次打开命令窗口都要进行输入cmd,可能会觉得很麻烦。
在这里跟大家说另外一种方法,针对使用的是Windows系统,可以直接在程序找到Windows PowerShell打开命令窗口。
2)输入命令:python3 setup.py sdist。(这里针对使用的是Mac OS X 或者linux系统)。如果你使用的是Windows系统,则需要把“Python3”替换为“C:\python31\python.exe”。
3) 但是,这时候,你会发现在Windows系统输入以上命令后,会出现提示:系统找不到指定路径。
4) 这时候,你是不是在想,明明操作跟书本上的一致,可为什么会出现这样的提示呢?该如何解决呢?
首先,要找到nester文件夹的位置,也就是路径。通过选择文件夹点击右键,查看属性,可以查看到文件的位置,选择复制。
然后,通过输入“cd“ 空格,再粘贴文件的位置,去到nester这个文件夹下面。如:C:\Users\admin> cd C:\Users\admin\Desktop\nester。
接着,直接输入指令:python setup.py sdist。
这时候不是输入“python3 setup.py sdist“,也不需要把“Python3”替换为“C:\python31\python.exe”。如:C:\Users\admin\Desktop\nester>python setup.py sdist。4、将发布安装到你的Python本地副本中。根据《Head First Python(中文版)》书中的步骤:
1) 在终端窗口,继续输入命令:sudo python3 setup.py install。注意:这个指令同样是针对使用的是Mac OS X 或者linux系统。
2) 如果在Windows系统输入以上命令后,则会出现提示:'sudo' 不是内部或外部命令,也不是可运行的程序或批处理文件。
3) 如何解决Windows系统输入命令后出现的错误提示呢?
这时候需要,去掉“sudo“并把”python3”改为”python”。
5、发布速览。利用Python发布工具,这时候模块已经转换为一个发布,并安装在Python的本地副本中。
1) 安装前,nester文件夹里,只有nester.py和setup.py两个文件。
2) 安装后,nester文件夹里,除了原来的nester.py和setup.py两个文件,还多出了MANIFEST文件,以及bulid和dist文件夹。
MANIFEST文件中包含发布的文件列表。
bulid文件夹中还包含了一个lib文件夹,文件夹里包含了nester.py文件。
dist文件夹里包含nester-1.0.0.tar.gz发布包。
这时候,你会发现,Windows系统下,安装后的nester文件夹里没有nester.pyc这个“编译”版本的代码文件。在哪里可以找到这个文件呢?
看回上面的命令窗口,你会发现后缀以.pyc结尾的文件路径,按照那个路径去找,其实是可以找到这个“编译”版本的代码文件的。
二、导入模块并使用
1、方法一:使用普通的import语句导入
1) 打开IDLE,使用指令:import 模块名称。
2) 定义一个列表。
3) 调用模块中的函数,输出列表内容。
注意:当代码放在单独的模块中时,Python会自动创建一个与模块同名的命名空间。所以调用模块中的函数时,就需要用该模块的命名空间名对这个函数的调用做出限定,否则,在调用模块中的函数时会出现NameError错误,因为你没有对名做出限定。例如《Head First Python(中文版)》书中的例子:
>>> import nester
>>> cast=["Palin","Cleese","Idle","Jones","Gilliam","Chapman"]
>>> print_lol(cast)Traceback (most recent call last):
File "", line 1, in
print_lol(cast)
NameError: name 'print_lol' is not defined
>>> nester.print_lol(cast)
Palin
Cleese
Idle
Jones
Gilliam
Chapman
2、方法二:使用特定的import语句导入。
1) 打开IDLE,使用指令:from 模块 import 函数,导入模块中特定的函数。
2) 定义一个列表。
3) 调用模块中的函数,输出列表内容。
例如《Head First Python(中文版)》书中的例子:
>>>from nester import print_lol
>>>cast=["Palin","Cleese","Idle","Jones","Gilliam","Chapman"]
>>>print_lol(cast)
Palin
Cleese
Idle
Jones
Gilliam
Chapman
三、注册PyPI网站,并向PyPI上传代码
1、注册PyPI网站
1) 访问PyPI网站:http://pypi.python.org/
2) 点击首页Register进行注册,填写用户名、密码、邮箱等信息。
3) 注册完成后,Email会收到一封确认的链接,点击链接进行确认。
2、向PyPI上传代码
1) 通过命令窗口注册PyPI。
打开命令窗口,输入指令:python3 setup.py register,这里针对使用的是Mac OS X 或者linux系统。如使用的是Windows系统,则在命令窗口输入指令:python setup.py register。注意:同样是要通过“cd”去到相应的文件夹。
这时候,你会发现报410错误。也就是说被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址。目前暂时只能跳过这个步骤。
2) 通过命令窗口上传代码。
打开命令窗口,输入指令:python3setup.py sdist upload,这里针对使用的是Mac OS X 或者linux系统。如使用的是Windows系统,则在命令窗口输入指令:python setup.py sdist upload。注意:同样是要通过“cd”去到相应的文件夹。
这时候,你会发现报403错误,这是在网站访问过程中,常见的错误提示,表示资源不可用。
在向PyPI上传代码过程中,出现报401和403错误,如果大家找到解决方法,也可以留言告诉我哦。
以上是,一个文科生,一个职场女性,一个小白,在发布和上传代码过程遇到的问题和解决办法,欢迎留言一起来交流~