【发布时间】:2019-09-05 08:39:57
【问题描述】:
我正在为我的关于 python 包分发的论文做一个简单的概念证明示例。我被困在我想安装一个简单包的例子上。
文件夹和文件布局如下:
baseApp/
├── baseApp
│ ├── app.py
│ └── __init__.py
├── __init__.py
└── setup.py
文件setup.py 包含:
from setuptools import setup, find_packages
setup(
name='BaseApp',
version='1.0',
packages="baseApp",
entry_points={
'console_scripts': [
'baseApp=baseApp.app:main '
]
}
)
文件app.py 是一个功能简单的文件:
def main():
print("main function")
我的想法是使用pip 安装这个包,但运行pip install ./baseApp 总是给出错误消息:
running install
running bdist_egg
running egg_info
creating BaseApp.egg-info
writing BaseApp.egg-info/PKG-INFO
writing dependency_links to BaseApp.egg-info/depjjjendency_links.txt
writing entry points to BaseApp.egg-info/entry_points.txt
writing top-level names to BaseApp.egg-info/top_level.txt
writing manifest file 'BaseApp.egg-info/SOURCES.txt'
error: package directory 'b' does not exist
即使尝试导航到文件夹然后运行 python setup.py install 也会给我同样的错误。最困扰我的是我不明白错误消息试图对我说什么。我没有看到任何名为b 的目录,也没有看到为什么会有一个。
我也尝试使用虚拟环境和系统分发,但都导致相同的错误消息。
我的问题是什么导致了这种行为,有什么简单的方法可以解决它还是我遗漏了什么?
【问题讨论】:
-
试试
packages=["baseApp"],我很确定这应该是一个列表。 -
@Tomalak 谢谢!它解决了它。
-
背景:当需要一个列表并且您给出一个字符串时,Python 将该字符串视为(字母)列表。所以在你的情况下,它会被视为
packages=['b', 'a', 's', 'e', 'A', 'p', 'p'],这解释了你看到的错误。 -
既然我们正在研究它,我认为它甚至还有更多的算法,因为输出到文件
top_level.txt是A a b e p s,它实际上包含了构成单词@ 所需的所有字母987654335@ 按字母顺序排序。我怀疑它,因为它很奇怪,但我认为它与它无关。现在文件中只包含baseApp -
是的,我想它会在内部对包列表进行重复数据删除,以防止不必要的包含。它最终排序是重复数据删除的副作用。