对于像下面这样的目录结构,我无法将xy
作为可导入的包。
xy
├── __init__.py
├── z
│ ├── __init__.py
│ └── stuff.py
└── setup.py
如果setup.py
是目录,我可以使用
from setuptools import setup
setup(name='xy',
packages=['xy'])
但没有这个,package_dir
和packages
的任何组合都不允许我import xy
,只有import z
。不幸的是,由于过多的硬编码路径,moving the setup.py目录不是真正的选项。
答案 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_dir
和packages
来帮助此类项目的想法,请参见以下答案: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': '.',
},
)