Python Can';我没法让蒸馏器工作

Python Can';我没法让蒸馏器工作,python,distutils,Python,Distutils,我编写了一个Python脚本,它使用了我创建的包。我需要对其进行打包,以便可以在多个服务器上安装它,但我无法让setup.py找到我的脚本 我的脚本有两部分:connections.py和作为X.utils.printing导入的模块(其中X是我的组名)。 我需要用distutils把它们都包起来 我已经阅读了大约五次Python Distutils文档,但我还是不明白 以下是我需要做的: 1) 确保已安装“我的打印模块”,并且可以与一起导入 from X.utils.printing impo

我编写了一个Python脚本,它使用了我创建的包。我需要对其进行打包,以便可以在多个服务器上安装它,但我无法让setup.py找到我的脚本

我的脚本有两部分:connections.py和作为X.utils.printing导入的模块(其中X是我的组名)。 我需要用distutils把它们都包起来

我已经阅读了大约五次Python Distutils文档,但我还是不明白

以下是我需要做的: 1) 确保已安装“我的打印模块”,并且可以与一起导入

from X.utils.printing import PrettyPrint as PP
2) 将connections.py放入/usr/sbin/

这应该是非常简单的,但它变得疯狂

以下是我当前的setup.py,它不起作用:

from distutils.core import setup

setup(name='connections', version='0.1.1', 
      description='Print number of IHS connections',    
      author='fandingo', author_email='fandingo@fandingo.com', 
      package_dir = {'X.utils' : 'X'}, 
      packages=['X.utils.printing'], py_modules=['printing', 'connections'])
setup.py驻留在名为“python”的目录中并从该目录运行,其中包含connection stats/和X。connection stats内部有connections.py。X有init.py、utils/init.py和utils/printing.py

当我尝试运行setup.py时,会得到以下输出:

python setup.py bdist

正在运行bdist正在运行bdist\u dumb

运行生成运行生成文件

printing.py(用于模块打印)不可用

找到文件connections.py(用于模块

连接)未找到错误:包

目录“X/正在打印”不存在

有人能帮我修复setup.py,这样我就可以打包脚本和模块了吗

谢谢你的帮助

编辑:我没有尝试将connections.py复制到/usr/sbin/。我没有找到我的模块


编辑2: 我认为我离目标越来越近了,但我无法让我的包层次结构发挥作用

使用

setup(name='connections', version='0.1.1', description='Print number of IHS connections',
      author='fandingo', author_email='fandingo@fanding.com',
      package_dir = {'printing' : 'X/utils'}, packages=['printing'], 
      scripts=['connection-stats/connections.py'])
我得到了一个成功的构建,它在执行安装时应该变成/usr/sbin/的connections.py。 唯一的问题是导入打印时没有使用X.utils.printing

我可以将其更改为包含X,但它不包含子包

setup(name='connections', version='0.1.1', 
      description='Print number of IHS connections', 
      author='fandingo', 
      author_email='fandingo@fandingo.com', 
      packages=['X'],
      scripts=['connection-stats/connections.py'])
这里的问题是导入了X,但只导入了init.py。未包含utils/这意味着我没有获得utils/printing.py

这就像我需要某种递归选项,这样我就可以添加X和它下面的所有内容。有什么想法吗

谢谢

---------------------- 编辑3:

差不多完成了。我发现我需要在X中显式列出每个子包

setup(
    name='connections',
    version='0.1.1',
    description='Print number of IHS connections',
    author='fandingo',
    author_email='fandingo@fandingo.com',
    package_dir = {'utils' : 'X/', 'printing' : 'X/utils/'},
    packages=['X', 'X.utils'],
    py_modules = ['printing'],
    scripts=['connection-stats/connections.py'])

唯一的另一件事是connections.py没有移动到/usr/sbin/。我想我只需要添加一个安装后选项来手动移动它。

我想您会想要如下内容:

from distutils.core import setup

setup(name='connections',
      version='0.1.1',
      description='Print number of IHS connections',
      author='fandingo',
      author_email='fandingo@fandingo.com',
      packages=['X'],
      scripts=['connection-stats/connections.py'])

更新:修复软件包列表

您的软件包、py_模块和软件包目录设置太复杂了。让我们后退一步。要分发的文件结构是什么?如果我理解正确,它是一个带有X.utils子包的X包,其中包含一个X.utils.printing模块。因此,对安装程序的调用应为setup(…,packages=['X','X.utils'])。现在,distutils不包括包中的所有包(您必须指定X.utils),但它包括包中的所有模块(您不必指定py_modules=['X.utils.printing'])。您可以测试吗


其次,distutils中不支持sbin。我们正在为distutils2进行这方面的工作。

谢谢jcollie,但这不起作用。我得到“错误:包目录'X/utils/printing'不存在。”您有“init.py”吗每个子目录中的文件?前导/尾随下划线很重要。是的,这里有一个X:X/\u init\u\u.py、X/utils、X/utils/\u init\u\u\u.py和X/utils/printing.py中的文件列表。是的,如果我们使用packages=['X.utils.printing']distutils会期望“X/utils/packages/\u init\u\u.py”存在。所以我们应该只列出包“X”.我想出来了。我必须列出每个子包。请参见编辑#3。感谢您的帮助!