2017-02-13 35 views
1

我们有一堆代码在特别的本地执行中被可怕地扔在一起。我已经开始重构它,并且希望分阶段进行此操作。使cli python代码与包管理器兼容

作为第一步,我希望把我们的代码放到一个包装精美的结构:

Project/ 
| 
|-- project/ 
| |-- code/ 
| | |-- __init__.py 
| | |-- horribleness_with_importables_but_also__main__.py 
| | |-- more_horribleness.py 
| |-- __init__.py 
| 
|-- setup.py 
|-- README.md 

因此,我可以做适当的事情setup.py__init__.py使$ pip install git+[my_project]作品如预期,使from project.more_horribleness import *按预期工作。

不过,现在我已经改变了我所有的本地进口的是相对的,并把进口__init__.py S和你有什么使PIP的事情工作...所以要避免任何重大问题,现在,我也会喜欢能够克隆回购和打电话,不知何故,$ python horribleness_with_importables_but_also__main__.py并让它像以前一样工作。有没有一种很好的方式来从我的新发现的pip包结构中运行我的python if __name__ == "__main__":

回答

1

鉴于你的包是纯Python,关键的部分是

/path/to/Project 

在Python路径,无论是经由PYTHONPATH环境变量或sys.path操纵。但是,这不是我推荐的解决方案。正如你所采取的护理,让您的包PIP安装的,我建议

  1. 使用pip install --user -e .:这将符号链接您的项目在~/.local/lib/pythonVERSION/site-packages但编辑到项目中都考虑在内。
  2. project/__main__.py移动的主要功能,以便它可以在命令行python -m project执行使用console_scripts选项已经安装在你的PATH安装https://packaging.python.org/distributing/#console-scripts
当你的可执行文件