python包中的脚本

Ali*_*lik 8 python packaging directory-structure project-structure

我开发了python应用程序,我决定将其转换为easy_installpip稍后安装的软件包.我已经使用搜索找到了几个关于python包的目录结构的好资料.请参阅此答案本文.

我创建了以下结构(我在列表中省略了几个文件以使结构更清晰)

Project/
|-- bin/
|-- my_package/
|   |-- test/
|   |   |-- __init__.py
|   |   |-- test_server.py
|   |-- __init__.py
|   |-- server.py
|   |-- util.py
|-- doc/
|   |-- index.rst
|-- README.txt
|-- LICENSE.txt
|-- setup.py           

之后我创建了可执行脚本 server-run

#!/usr/bin/env python
from my_package import server

server.main()

我放入bin目录.如果我安装我的包python setup.py install或通过pip/easy_install一切正常,我可以运行server-run,我的服务器开始处理传入的请求.

但我的问题是如何测试server-run在开发环境中工作(没有事先安装my_package)?此外,我想使用此脚本运行最新的服务器代码以用于开发目的.

开发发生在Project目录中,所以ImportError如果我运行我会得到./bin/server-run

user@host:~/dev/Project/$ ./bin/server-run
Traceback (most recent call last):
  File "./bin/server-run", line 2, in 
    import my_package
ImportError: No module named my_package

是否有可能修改bin/server-run脚本,以便它可以工作,如果我从文件系统中某处的另一个文件夹(不一定是从Projectdir)运行它?另请注意,我想使用(如果可以实现)相同的脚本来在生产环境中运行服务器.

agf*_*agf 5

你需要相对进口.尝试

from .. import mypackage
Run Code Online (Sandbox Code Playgroud)

要么

from ..mypackage import server
Run Code Online (Sandbox Code Playgroud)

文档在这里

http://docs.python.org/tutorial/modules.html#intra-package-references

这些适用于Python 2.5或更高版本.

要仅在开发版本中执行此操作,请尝试:

try:
    from my_package import server
except ImportError:
    from ..my_package import server
Run Code Online (Sandbox Code Playgroud)