尝试 运行 使用 setuptools 创建的可执行文件时出现 ModuleNotFoundError
ModuleNotFoundError when trying to run executable created with setuptools
这是我的项目结构
/Users/tom/PycharmProjects/foo
├── __init__.py
├── foo
│ ├── __init__.py
│ ├── app.py
│ └── run.py
└── setup.py
app.py:
def hello_world():
print("Hello world")
run.py:
from foo.app import hello_world
def main():
hello_world()
setup.py:
from setuptools import setup, find_packages
setup(
name='foo',
version='0.0.1',
packages=find_packages(),
entry_points={
'console_scripts': [
'foo=foo.run:main',
]
}
)
使用 pip 安装后,我有以下文件夹结构:
/Users/tom/Desktop/foo/
├── bin
│ └── foo
├── foo
│ ├── __init__.py
│ ├── app.py
│ └── run.py
└── foo-0.0.1.dist-info
├── INSTALLER
├── METADATA
├── RECORD
├── REQUESTED
├── WHEEL
├── direct_url.json
├── entry_points.txt
└── top_level.txt
当 运行 在 /bin 中执行可执行文件 foo 时,我收到以下错误:
Traceback (most recent call last):
File "/Users/tom/Desktop/foo/bin/foo", line 5, in <module>
from foo.run import main
ModuleNotFoundError: No module named 'foo'
如何在 无需激活虚拟环境并从中 运行 的情况下 运行可执行文件?
我通过将 run.py 中的导入语句更改为:
解决了这个问题
from app import hello_world
和setup.py到:
scripts=['foo/app.py', 'foo/run.py'],
entry_points={
'console_scripts': [
'hello-world=run:main'
]
}
使用 pip 安装后,app.py
和 run.py
被添加到 /bin 中,这似乎解决了问题。
这是我的项目结构
/Users/tom/PycharmProjects/foo
├── __init__.py
├── foo
│ ├── __init__.py
│ ├── app.py
│ └── run.py
└── setup.py
app.py:
def hello_world():
print("Hello world")
run.py:
from foo.app import hello_world
def main():
hello_world()
setup.py:
from setuptools import setup, find_packages
setup(
name='foo',
version='0.0.1',
packages=find_packages(),
entry_points={
'console_scripts': [
'foo=foo.run:main',
]
}
)
使用 pip 安装后,我有以下文件夹结构:
/Users/tom/Desktop/foo/
├── bin
│ └── foo
├── foo
│ ├── __init__.py
│ ├── app.py
│ └── run.py
└── foo-0.0.1.dist-info
├── INSTALLER
├── METADATA
├── RECORD
├── REQUESTED
├── WHEEL
├── direct_url.json
├── entry_points.txt
└── top_level.txt
当 运行 在 /bin 中执行可执行文件 foo 时,我收到以下错误:
Traceback (most recent call last):
File "/Users/tom/Desktop/foo/bin/foo", line 5, in <module>
from foo.run import main
ModuleNotFoundError: No module named 'foo'
如何在 无需激活虚拟环境并从中 运行 的情况下 运行可执行文件?
我通过将 run.py 中的导入语句更改为:
解决了这个问题from app import hello_world
和setup.py到:
scripts=['foo/app.py', 'foo/run.py'],
entry_points={
'console_scripts': [
'hello-world=run:main'
]
}
使用 pip 安装后,app.py
和 run.py
被添加到 /bin 中,这似乎解决了问题。