我在这里做错了什么?
我的结构:-
├── tst
│ ├── setup.py
│ └── tst
│ ├── __init__.py
│ ├── mre.py
│ └── start.py
start.py的内容
from mre import mre
def proc1():
mre.more()
return ('ran proc1')
if __name__ == "__main__":
print('test')
print(proc1())
mre.py的内容
class mre(object):
def more():
print('this is some more')
setup.py的内容
from setuptools import setup
setup(name='tst',
version='0.1',
description='just a test',
author='Mr Test',
author_email='[email protected]',
entry_points={'console_scripts': ['tst=tst.start:proc1']},
license='MIT',
packages=['tst'],
zip_safe=False)
__init__.py
中没有
当我从命令行运行此程序时,一切正常,可以按预期运行。但是,当我使用PIP打包并使用tst运行时,我得到:-
Traceback (most recent call last):
File "/home/simon/.local/bin/tst", line 5, in <module>
from tst.start import proc1
File "/home/simon/.local/lib/python3.8/site-packages/tst/start.py", line 1, in <module>
from mre import mre
ModuleNotFoundError: No module named 'mre'
如果我进入已安装的代码并更改行,我已经阅读了很多文章,但似乎似乎无法弄清楚这一点
from mre import mre
到
from tst.mre import mre
然后它起作用了,但是当出于开发目的而从目录运行它时那是行不通的……我显然缺少明显的东西:)是路径问题还是在setup.py中缺少了命令? ?
如果有人能指出我正确的方向?
编辑:在开发将要打包的模块时,我是否需要做一些不同的事情,也许以不同的方式调用代码?
欢呼声
从我的角度来看,绝对导入from tst.mre import mre
是正确的事情。您最终可以使用from .mre import mre
,但绝对导入更安全。
出于开发目的,请使用path/to/pythonX.Y setup.py develop
和/或使用path/to/pythonX.Y -m tst.start
运行代码。