关于打包:python包中的脚本

Scripts in python package

Python的开发应用将决定把which to be installed"包装easy_installpip以后备用。used to find search我好about several源目录结构packages see this for this答案或Python。P></

结果导致构(created several我omitted in the list文件结构清晰,好让更多)P></

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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-runcreated executableP></

1
2
3
4
#!/usr/bin/env python
from my_package import server

server.main()

它的placed into bin目录。如果我python setup.py install或包装与安装等工作pip/easy_install一切结束,我和我的服务器开始运行server-runincoming requests to handle。P></

但我的问题是,如何在开发环境server-run试验工厂(没有事先安装my_packageof)?我也使用这个脚本的运行队列的新用途for dev的服务器。P></

开发能让我知道Project目录运行./bin/server-runImportErrorifP></

1
2
3
4
5
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

is possible to modify恩知道它会工作,如果bin/server-run脚本运行它从一个地方在文件系统(not the folder目录Projectnecessarily from)?注释*我想也用(if it is possible to the same是脚本)运行在生产服务器环境。P></


你需要相对进口。尝试

1
from .. import mypackage

1
from ..mypackage import server

文件在这里

http://docs.python.org/tutorial/modules.html包内引用

这些功能适用于Python2.5或更高版本。

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

1
2
3
4
try:
    from my_package import server
except ImportError:
    from ..my_package import server


在开发过程中,您可以使用virtualenv来测试python代码,就好像它是发布的一样。


最简单的方法是配置正确的python路径,因此python知道在当前目录中查找my_package

在Linux上(使用bash):

1
2
export PYTHONPATH=.
bin/server-run

在Windows上:

1
2
set PYTHONPATH=.
python bin/server-run