如何将根目录的所有内容分发到具有该名称的目录

时间:2016-10-06 00:20:38

标签: python distutils setup.py

我有一个名为h的项目,结构如

myproj

我的/myproj __init__.py module1.py module2.py setup.py 看起来像这样

setup.py

但是这会在安装目录中放置from distutils.core import setup setup(name='myproj', version='0.1', description='Does projecty stuff', author='Me', author_email='me@domain.com', packages=['']) module1.py

如何指定module2.py以使目录setup及其所有内容都被删除到安装目录中?

1 个答案:

答案 0 :(得分:1)

在此项目的myproj根目录中,您希望将module1.pymodule2.py移动到名为myproj的目录下,如果您希望维护Python < 3.3兼容性,在那里添加__init__。py。

├── myproj
│   ├── __init__.py
│   ├── module1.py
│   └── module2.py
└── setup.py

您也可以考虑使用setuptools而不仅仅是distutils。 setuptools提供了更多辅助方法和其他属性,使得设置此文件更加容易。这是我为上述项目构建的最低setup.py

from setuptools import setup, find_packages

setup(name='myproj',
      version='0.1',
      description="My project",
      author='me',
      author_email='me@example.com',
      packages=find_packages(),
      )

运行安装时,您应该看到如下所示的行:

copying build/lib.linux-x86_64-2.7/myproj/__init__.py -> build/bdist.linux-x86_64/egg/myproj
copying build/lib.linux-x86_64-2.7/myproj/module1.py -> build/bdist.linux-x86_64/egg/myproj
copying build/lib.linux-x86_64-2.7/myproj/module2.py -> build/bdist.linux-x86_64/egg/myproj

这表示安装脚本已获取所需的源文件。运行python解释器(最好在此项目目录之外)以确保可以导入这些模块(不是由于相对导入)。

另一方面,如果您希望在根级别提供这些模块,您肯定需要明确声明py_modules

最后,对于构建可分发python包的任何人可能有的更具体的问题,Python Packaging User Guide是一个很好的资源。