当前位置: 首页 > 知识库问答 >
问题:

通过pip3安装Python应用程序不安装源代码包

缪嘉志
2023-03-14

这里是我的python项目结构

▶ tree -L 2
.
├── Dockerfile
├── README.md
├── my_app
│   ├── __init__.py
│   ├── main.py
│   ├── settings.py
│   ├── utils.py
│   └── views.py
    package_dir={'': 'my_app'},
    packages=find_packages(where='my_app'),
    include_package_data=True,
    python_requires='>=3.9',
    entry_points={
        'console_scripts': [
            'my-app=my_app.main:run',
        ],
pip3 install .  --force-reinstall

运行正常,我在虚拟环境中。

然而,当试图运行程序时

Traceback (most recent call last):
  File "/Users/myuser/myfolder/.venv/bin/my-app", line 5, in <module>
    from my_app.main import run
ModuleNotFoundError: No module named 'my_app'

我还注意到在ls.venv/lib/python3.9/site packages/中没有myapp的源文件,只有myu app-0.0.1.dist info文件

为什么呢?

共有1个答案

轩辕鸿祯
2023-03-14

您误解了find_程序包(where='my_app')的工作原理,请参见以下内容:

find_packages(where=',exclude=())
返回在目录where中找到的所有Python包的列表

这意味着它并不意味着尝试从当前文件夹中找到包my_app,而是尝试从文件夹中找到包my_app,在您的情况下,不会在my_app中找到包。

所以,对于你的情况,接下来就足够了:

setup.py:

from setuptools import setup, find_packages

setup(
    name="my-app",
    version="0.0.1",

    packages=find_packages(),
    include_package_data=True,
    entry_points={
        'console_scripts': [
            'my-app=my_app.main:run',
        ],
    }
)

另外,如果你的主要意图只是包含my_app,绕过其他,那么find_packages(包括=[语法就是你要找的:

setup.py:

from setuptools import setup, find_packages

setup(
    name="my-app",
    version="0.0.1",

    packages=find_packages(include=['my_app']),
    include_package_data=True,
    entry_points={
        'console_scripts': [
            'my-app=my_app.main:run',
        ],
    }
)

注意,不要使用package_dir={'': 'my_app'},它将尝试查找my_app.my_app,除非您使用package_dir={'my_app':'my_app'},但在您的情况下没有意义。

 类似资料:
  • 1.7. 从源代码安装 Python 如果您宁愿从源码创建, 可以从 http://www.python.org/ftp/python/下载 Python 的源代码。选择最新的版本, 下载.tgz 文件, 执行通常的 configure, make, make install 步骤。 例 1.4. 从源代码安装 localhost:~$ su - Password: [enter your ro

  • 我已经在android Studio2.3.1和Gradle3.2中设计了2到3个应用程序。当我将应用程序从它运行到任何设备或仿真器时,所有的程序都运行良好。但当我从build文件夹中获取apk并手动安装到设备或仿真器时。它每次都崩溃并给我错误classnotfound。这是主要活动。 我在用Mac,我试过很多种方法。即使我建立了新的项目,但仍然是同样的错误。下面是它的logcat。

  • 问题内容: 我正在尝试在Ubuntu PC上使用composer安装laravel安装程序,但是在安装过程中出现此错误。您的要求无法解决为一组可安装的软件包。 出现错误,然后我使用此注释: 问题答案: 它说它需要 zip扩展名 laravel / installer v1.4.0需要ext-zip ........ 安装与已安装的php版本相对应的版本:

  • 首先你需要安装Golang,关于Golang的安装,参见官方文档 install instructions。 下载 你需要获取Gitea的源码,最方便的方式是使用 go 命令。执行以下命令: go get -d -u code.gitea.io/gitea cd $GOPATH/src/code.gitea.io/gitea 然后你可以选择编译和安装的版本,当前你有多个选择。如果你想编译 mas

  • 我不知道我应该从哪里开始,因为我必须通过安装4j安装程序在JBoss上部署一个网络应用程序。 我已经创建了动态Web应用程序,我想在JBoss上部署这个应用程序,但是部署一个war文件并在客户端机器上配置JBoss不是一个好主意,因此我想创建一个安装程序文件(. exe)文件,它将处理以下事情: > 在客户机上安装JBoss服务器 在JBoss服务器上部署我的应用程序 所以我只需要把安装程序文件给

  • 我正在通过终端安装CreateReact应用程序。我已经检查了节点。js版本是4.5。0,高于此处的要求。npm的版本是2.15。9.然后我键入命令npm install-g create react app,出现这样的错误信息: 我想知道为什么我会犯这样的错误。有人能帮我解决这个问题吗?非常感谢你!