我试图让使用pip
安装Python的人能够导入我的Pythonproject。尽管它包含一个__init__.py
并在本地作为一个包工作,但我似乎误解了setuptools的工作原理
我运行以下三个命令来上传包
python3 setup.py sdist bdist_wheel
python3 -m pip install --upgrade twine
python3 -m twine upload dist/*
然后在另一台机器上运行pip3 install smux.py
。结果是,我可以作为命令访问smux.py
,但在尝试导入时出现导入错误
python3
Python 3.8.5 (default, Jul 28 2020, 12:59:40)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import smux
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'smux'
运行上面的setup.py
命令后,我检查了当前目录中的smux.py.egg-info/SOURCES.txt
,发现它包含以下内容:
README.md
setup.py
smux.py
smux.py.egg-info/PKG-INFO
smux.py.egg-info/SOURCES.txt
smux.py.egg-info/dependency_links.txt
smux.py.egg-info/top_level.txt
缺少文件__init__.py
如何将该文件放入包中,或修改设置调用以使smux
可导入?
另一个答案是更为洁净和现代的答案,如果我没有依赖于名称
smux.py
的遗留脚本,我会使用它并将脚本命名为smux
。不幸的是,其他人已经包装了smux.py
,破坏他们的脚本是不友好的下面是我为避免循环依赖性问题所做的工作,循环依赖性问题是由于遗留脚本名以
.py
结尾并与模块命名冲突而产生的最后,我修改了
setup
调用,使其具有以下两种功能我的实验表明,这具有使模块可导入的预期效果,同时保留名为
smux.py
的工作脚本您的
setup
调用如下所示:使用
scripts
参数,您已经告诉setuptoolssmux.py
是一个脚本,而不是一个模块。因此,它将作为脚本而不是模块安装您的代码不需要} 项单独注册入口点:
__init__.py
,也不应该有一个。拥有一个__init__.py
是没有帮助的。您需要告诉setuptools以模块而不是脚本的形式安装文件,并使用entry_points
参数中的^{然后,在安装代码时,
smux
将是可导入的,并且可以从调用smux.main
的命令行获得一个smux
脚本相关问题 更多 >
编程相关推荐