关于Jean Paul Calderone文件系统结构

时间:2015-11-20 15:25:35

标签: python-3.x import

For a Python3 project of my own,我试图关注file system structure described by Jean-Paul Calderonecredits for the original document):

MyProject/
|-- bin/
|   |-- myproject
|
|-- myproject/
|   |-- test/
|   |   |-- __init__.py
|   |   |-- test_main.py
|   |   
|   |-- __init__.py
|   |-- main.py
|
|-- setup.py
|-- README

我的项目尚未成熟,但测试还可以:调用nosetests 按预期运行代码的不同部分

所以现在,我试图制作一个可执行文件,一个"外部入口点"到我的代码。我正在努力解决可执行文件的内容(bin / myproject);我读了Jean-Paul Calderone blog

  

不要给他们一个.py扩展名,即使他们是Python源代码   文件。除了导入和调用a之外,不要在其中添加任何代码   主要功能在项目的其他地方定义。

所以,我尝试用以下行填充可执行文件......

from ..myproject.main import main
main()

...但是在Project目录中并使用bin/myproject调用我的程序会引发导入错误:

  

SystemError:父模块''未加载,无法执行相对导入

我无法走得更远:有什么想法可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

好吧,我明白了:

import sys, os
sys.path.append( os.path.join("..", "myproject") )

from myproject.main import main
main()

:向sys.path添加正确的路径就可以了。

顺便说一下,Pypi不需要创建这样的可执行脚本,它可以创建自己的入口点;请参阅setup.py中的以下几行:

entry_points={
    # let's create an executable script named 'myproject' :
    'console_scripts': ['myproject=myproject.main:main',],
},

...但是这样的可执行脚本是一种非常方便的方式来尝试项目而无需使用pypi安装它;这样的脚本可以轻松启动项目"即时启动"。