Setup.py里面安装的模块

时间:2014-01-17 22:43:01

标签: python setup.py

对于像下面这样的目录结构,我无法将xy作为可导入的包。

xy
├── __init__.py
├── z
│   ├── __init__.py
│   └── stuff.py
└── setup.py

如果setup.py是目录,我可以使用

from setuptools import setup
setup(name='xy',
      packages=['xy'])

但没有这个,package_dirpackages的任何组合都不允许我import xy,只有import z。不幸的是,由于过多的硬编码路径,moving the setup.py目录不是真正的选项。

2 个答案:

答案 0 :(得分:0)

我偶然发现了同样的问题并没有找到任何正确的解决方案(请参阅“使用预定义的设置选项”)。

我最终制作了一个丑陋的补丁:我将所有内容移动到一个名为包的新子目录中,然后将所有内容移回。

import os, errno

# create directory
directory = 'xy/'
try:
    os.makedirs(directory)
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

# move important files
move = [ ... ]

for fname in move:
    os.rename(fname, directory + fname)

setup(
    ...
    package_dir = {'': '.'},
    ...
)


# move back
for fname in move:
    os.rename(directory + fname, fname)

答案 1 :(得分:0)

有关如何使用package_dirpackages来帮助此类项目的想法,请参见以下答案:https://stackoverflow.com/a/58429242/11138259

在这种情况下,简而言之:

#!/usr/bin/env python3
import setuptools
setuptools.setup(
    # ...
    packages=['xy', 'xy.z'],
    #packages=setuptools.find_packages('..')   # only if parent directory is otherwise empty
    package_dir={
        'xy': '.',
    },
)