怎么建立一个 python 包,并且发布到 pypi,有很多文章介绍了。同样,怎么在 github 建立一个开源项目,也不难。
把这两个事情一起做,加上我用 pycharm 来辅助完成 python 包的建立,以及用 source tree 来管理 github 项目,事情可就不少了。
小结一下经验体会:
1 建立 python 包,网上大部分教程没什么问题,如果用 pycharm 会更加容易一些,在菜单 Tools 中,会看到 Create setup.py,pycharm 会做一些目录结构调整、生成最基本的需要的文件,以及输入版本作者之类的事情。
2 文件结构转换为包的形式后,pycharm 很聪明的会在菜单 Tools 中,增加一个 Run setup.py Task。可以节约一些工作量,比如 sdist,这是必须执行的,upload 上传也是必须执行的。不过这里有一个坑,在 sdist 执行好之后,就可以选择 install 命令安装自己的包,然后在程序里面 import 什么都可以了,但是如果这时候你想上传 pypi 可能会报错:
error: no dist file created in earlier command
当然,肯定已经在 pypi 注册过用户了,查了不少资料,原来是要先这样操作:
python setup.py sdist upload
没有在 pycharm 中找到相应的命令,在终端模式下输入吧。
然后就可以 upload 了。所以,如果你 upload 到 pypi 同样碰到上面的错误,不妨试试看先这样操作一下。
来源这个老外的博客文章,写的很有趣也很清楚。
补充:直接执行上面的命令,应该是连 sdist 和 upload 一起都运行了,这样是最方便的。
running sdist running check warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list) writing manifest file 'MANIFEST' creating fish_base-1.0.2 creating fish_base-1.0.2/fish_base making hard links in fish_base-1.0.2... hard linking README.txt -> fish_base-1.0.2 hard linking setup.py -> fish_base-1.0.2 hard linking fish_base/__init__.py -> fish_base-1.0.2/fish_base Creating tar archive removing 'fish_base-1.0.2' (and everything under it) running upload Submitting dist/fish_base-1.0.2.tar.gz to https://pypi.python.org/pypi HTTP Error 500: Internal Server Error error: HTTP Error 500: Internal Server Error
看这里的操作,当 upload 后,显示了错误的信息,但是到 pypi 上看,已经传上去了,略有奇怪,可能这里的网络不稳定。
3 github 中碰到的问题,就是 https 模式下,用户名密码始终通不过验证,然后换成用 ssh 证书模式,按照 github 上的操作是最靠谱的,并且他们区分了不同操作系统,个人私钥的文件名一定要叫 id_rsa,反正我这里不叫这个就是通不过。
严格按照 github 上的步骤,以及测试 ssh 是否通顺的方法,如果不能通过,肯定是不能用的。
4 在项目的 .git 目录下,有一个 config 文件,可以修改其中的 https 模式到 ssh 模式。
5 osx EI Capitan 在 Finder 中显示隐藏信息的方法和之前版本有所改变:
defaults write com.apple.finder AppleShowAllFiles -bool true killall Finder
关键是后面那句。
source tree 作为一个免费强大的版本管理软件,没什么好说的,使用起来也很方便。
好了,我要修改代码了,为了试验,所传的项目代码都很烂,需要好好修改一下。