mac osx 下建立 python package 以及在github 上开源项目的操作过程

怎么建立一个 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 作为一个免费强大的版本管理软件,没什么好说的,使用起来也很方便。

好了,我要修改代码了,为了试验,所传的项目代码都很烂,需要好好修改一下。

使用git管理develop分支心得之一

git的分支管理是最强大的,所以我们也尝试去用。当然一开始用的有点乱,并且我有一台work computer和一台home computer,我经常通过git在两台电脑之间保持连续性工作,最简单的办法是用master分支,不过那样太对不起git了,经过了很多尝试之后,发现我两台电脑的分支、tag已经不一致了,加上其他人使用的,所以服务端上也是另外一个样子。

这时,正好看得到这篇好文章,讲述了用master和develop两个分支,通过tag来管理版本等一些非常棒的git使用方法总结。

但是对于我这样git命令很不太懂的人,加上git本身一些比较奇怪的用户体验(我甚至觉得这就是linux的问题,所以现在用的人是越来越少了),折腾了很久,终于搞定了。

我的应用场景是所有这些介绍文章中没有提到的,就是我已经弄乱了分支,现在想用开发develop分支,发布时候合并到master,并且有好几台电脑(相当于好几个用户),同时我主要用的是tortoise git,因为几乎是图形化的操作,很容易。

1 删除git服务器上所有不需要的分支,不管是bitbucket或者github都有这个功能,先把主控弄干净。
2 按照阮的blog中介绍的,在本地一台电脑上,创建develop分支:git checkout -b develop master
3 切换到这个develop分支,git checkout develop
的确在git gui中打命令比较快和方便,用图形化界面肯定可以,但是一些参数万一弄不好就麻烦了。
4 在这台电脑上开发,修改代码等等,全部弄好了之后,上传,就用右键的上传命令,肯定是 Git Commit… -> ‘develop’,也就是当前修改的会传到develop分支
5 换一台电脑,如果这个computer B之前也像我弄的分支很多,并且已经不怎么同步的了话,可以这样做,先 pull 最新的版本,在pull的窗口里,分支名称可以自己输入的,然后我碰到的奇怪问题就是拉下来之后在本地并不是develop分支,本地还没有建立过,用git命令切换也没用。
6 google了一下,这样子操作,先切换本地到master,然后把不用的分支全部删除,然后用git fetch命令,就拿到了服务器上最新的分支情况,现在是干干净净的master和develop了,然后用前面的git checkout develop就可以了。

说实话,没有好好去弄懂git的原理,也不太想懂那么多,只要实战会就可以了,愚人之见。