python包中的脚本

时间:2011-07-23 07:39:25

标签: python packaging directory-structure project-structure

我开发了python应用程序,我决定转而使用easy_installpip之后安装的软件包。我已经使用搜索来查找有关python包的目录结构的几个很好的来源,请参阅this answerthis post

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

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 installpip/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脚本,以便在我从文件系统某处的另一个文件夹(不一定来自Project dir)运行它时它会起作用?另请注意,我想使用(如果可以实现)相同的脚本来在生产环境中运行服务器。

4 个答案:

答案 0 :(得分:5)

您需要相对进口。尝试

from .. import mypackage

from ..mypackage import server

文档在这里

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

答案 1 :(得分:4)

您可以使用virtualenv在开发过程中测试Python代码,就像它已发布一样

答案 2 :(得分:2)

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

在Linux上(使用Bash):

export PYTHONPATH=.
bin/server-run

在Windows上:

set PYTHONPATH=.
python bin/server-run

答案 3 :(得分:0)

现在有 console_scripts approach。参见例如

entry_points={
      'console_scripts': [
        'wikibackup = wikibot.wikipush:mainBackup',   
        'wikiedit = wikibot.wikipush:mainEdit',
        'wikinuke = wikibot.wikipush:mainNuke',
        'wikipush = wikibot.wikipush:mainPush',
        'wikiupload = wikibot.wikipush:mainUpload',
        'wikiuser = wikibot.wikiuser:main',
      ],
    },

来自 https://pypi.org/project/py-3rdparty-mediawiki/(我是提交者)。

如果您对该软件包执行 pip 安装,上述脚本将作为安装过程的一部分进行安装。

有关安装脚本的完整源代码,请参阅 https://github.com/WolfgangFahl/py-3rdparty-mediawiki/blob/master/setup.py