使用setuptools在root下移动包

时间:2015-04-13 15:07:12

标签: python packages setuptools distutils

这是(我的一部分)项目结构:

<root>
|- src
     |-main
         |-python
             |- common
             |- constans
             |- controller
             |- resources
             |- rest
 - setup.py

我想让我的包'常用','映射器'和'休息'在根目录下可用(这将使引用更简洁)。它应该是这样的:

   <root>
     - common
     - mappers
     - rest
     - setup.py

这是我的setup.py文件,基于https://docs.python.org/2/distutils/examples.html#pure-python-distribution-by-package

from setuptools import setup, find_packages

setup(name='my_project',
      version='0.0.1',
      package_dir={'src.main.python': ''},
      packacges = ['src.main.python']
     )

根据我在网上找到的一个例子,我有一个MANIFEST.in文件:

include src.main.python fp README COPYING
recursive-include src\main\python *

当我使用命令python setup.py sdist时,它会在根目录下创建一个目录'dist',我的项目在一个zip文件中。我的包(普通,地图和休息)在src\main\python下,而不是在根文件夹下。如何将它们放在根文件夹下呢?

1 个答案:

答案 0 :(得分:0)

我使用pybuilder http://pybuilder.github.io/创建了我的项目,有一个关于如何创建项目等的很棒的教程。当你的项目被创建并且你的代码已经准备好构建时,请转到build.py所在的根目录。找到文件并使用

pyb

在项目的根目录中创建目标文件夹。 转到target/dist/name_of_your_project应该有一个setup.py文件。 在此安装文件中,pybuilder为您生成,确保 zip_safe = False 。这是我的设置文件的摘录:

from setuptools import setup
if __name__ == '__main__':
    setup(
          name = 'my_project',
          version = '1.0.dev0',

           ....

          packages = ['my_project', 'my_project.common', 'my_project.mappers', 'my_project.rest'],
          py_modules = ['__init__'],
          classifiers = ['Development Status :: 3 - Alpha', 'Programming Language :: Python'],
          entry_points={
          'console_scripts':
              []
          },
             #  data files
             # package data


          zip_safe=False
    )

在此处使用以下命令:

python setup.py install

将根据setup.py文件中的信息在Lib / site-packages中创建一个文件夹:

c:\python27\lib\site-packages\my_project-1.0.dev0-py2.7.egg

在您的site-packages文件夹中有一个名为easy-install.pth的文件,应该有一个包含此egg文件名称的条目:

import sys; sys.__plen = len(sys.path)
./loggingserver-0.1dev_r0-py2.7.egg
   .....
./my_project-1.0.dev0-py2.7.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

此文件中的目录用作挂钩。在任何项目中,您现在可以引用my_project-1.0.dev0-py2.7.egg的子文件夹。

所以我要说my_project-1.0.dev0-py2.7.egg的结构如下:

-my_project
   - common
   - mappers
   - rest
   - EGG_INFO

参考常见如下:

from my_project import common