相关疑难解决方法(0)

27
推荐指数
2
解决办法
2万
查看次数

__init__.py和__main__.py有什么区别?

我知道这两个关于文件__init__.py和问题的问题__main__.py.

什么是__init__.py?

什么是__main__.py?

但我真的不明白它们之间的区别.

python python-3.x

27
推荐指数
2
解决办法
2万
查看次数

从具有相同名称的脚本导入Python包

我正在尝试通过将脚本从包目录移动到顶级脚本目录来重新组织我的Python项目.在这些更改之后,这就是我的项目层次结构:

MyProject/
    setup.py

    scripts/
        my_package.py

    my_package/
        __init__.py
        module_foo.py
Run Code Online (Sandbox Code Playgroud)

请注意脚本和包具有相同的名称.

脚本my_package.py看起来像这样:

# MyProject/scripts/my_package.py
import os
try:
    import my_package
    print os.path.abspath(my_package.__file__)
except ImportError as e:
    print e
Run Code Online (Sandbox Code Playgroud)

当我们运行上面的脚本解释器导入当前模块而不是的同名(注:my_package已经被安装到site-packages.作为一个鸡蛋,我们的虚拟环境中正常启动)

如果它们具有相同的名称,我如何从脚本中导入my_package my_package.py

其他技术信息:

  • Python 2.7.3
  • Ubuntu Server 12.04 LTS
  • VirtualEnv 1.11.6

python

13
推荐指数
1
解决办法
1240
查看次数

使用entry_points / console_scripts时“没有名为x.__main__的模块;'x'是一个包,无法直接执行”

我有一个名为 Rackfocus 的 CLI 工具。我已经发布到 PyPI,并且我有理由确定它之前工作得很好。当我尝试在 Mac 上使用当前版本的 Python 运行它时,出现错误:

No module named rackfocus.__main__; 'rackfocus' is a package
and cannot be directly executed
Run Code Online (Sandbox Code Playgroud)

我想要的只是一个带有一个入口点的包,用户可以使用 pip 下载和使用该包。

根据教程,我在setup.py中有这个:

packages=['rackfocus']
entry_points = {
    'console_scripts': [
        'rackfocus=rackfocus.run:main'
    ]
}
Run Code Online (Sandbox Code Playgroud)

我有一个rackfocus.run:main函数、一个init .py 等等。怎么了?

您可以在本地重现此内容:

  1. 克隆我的仓库。
  2. 创建并激活 virtualenv(可选)。
  3. pip3 install -e .
  4. python3 -m rackfocus

python pip setuptools command-line-tool pypi

12
推荐指数
1
解决办法
2万
查看次数

如何使用诗歌将 Python 轮子打包为 cli 可执行文件?

问题

\n

我想使用诗歌分发一个 python 包并使其作为 cli 可执行,就像black, pipenv, poetry,flake8朋友一样。

\n

示例用法如下:

\n
python -m my-package [args]\n
Run Code Online (Sandbox Code Playgroud)\n

配置

\n

到目前为止,我已经成功构建了一个轮子并使用以下配置将其安装在 docker 映像上:

\n

pyproject.toml

\n
[tool.poetry]\nname = "my-package\nversion = "0.1.0"\ndescription = "A cli tool"\nauthors = []\npackages = [\n    { include = "src/main.py" },\n]\n\n[build-system]\nrequires = ["poetry-core>=1.0.0"]\nbuild-backend = "poetry.core.masonry.api"\n
Run Code Online (Sandbox Code Playgroud)\n

构建命令:

\n
poetry build -f wheel\npoetry export -o dist/requirements.txt\n
Run Code Online (Sandbox Code Playgroud)\n

Docker 镜像:

\n
FROM python:3.8-slim as base\n\nCOPY dist/requirements.txt /requirements.txt\nRUN pip install --no-cache-dir --upgrade -r /requirements.txt\nARG APP_VERSION\nCOPY …
Run Code Online (Sandbox Code Playgroud)

python command-line-interface python-wheel python-poetry

6
推荐指数
1
解决办法
6996
查看次数

Python文件名中双下划线的意义

除了__init__.py文件之外,前导和尾随双下划线在文件名中是否有任何意义?例如,是否__model__.py比任何方式更重要model.py

python

4
推荐指数
1
解决办法
1321
查看次数

Shebang用于编译Python代码

我曾经在Python脚本的顶部添加shebang行,

#!/usr/bin/python
...
Run Code Online (Sandbox Code Playgroud)

我可以执行my.py文件,

chmod a+r my.py
./my.py
Run Code Online (Sandbox Code Playgroud)

但是在编译成字节码之后,脚本只能由python执行,并且shebang不再起作用了.

python my.pyc
Run Code Online (Sandbox Code Playgroud)

反正有没有让shebang可以编译python脚本?

./my.pyc
Run Code Online (Sandbox Code Playgroud)

python shebang

2
推荐指数
1
解决办法
937
查看次数

如何找出任何Python项目中代码执行的起点?

我一直在寻找各种开放源代码GitHub的Python项目一样, http-promptTheano

我无法弄清楚它们的起点在哪里,以便可以优雅地调试它们。我需要查看每个文件中的__main__方法吗?

我来自Android背景;所以我在搜索相关内容,例如AndroidManifest.xml从哪里可以得到代码开始的地方的想法,但是我的尝试没有成功。

python debugging

2
推荐指数
1
解决办法
4081
查看次数