我正在尝试通过将脚本从包目录移动到顶级脚本目录来重新组织我的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
我有一个名为 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 等等。怎么了?
您可以在本地重现此内容:
pip3 install -e .python3 -m rackfocus我想使用诗歌分发一个 python 包并使其作为 cli 可执行,就像black, pipenv, poetry,flake8朋友一样。
示例用法如下:
\npython -m my-package [args]\nRun Code Online (Sandbox Code Playgroud)\n到目前为止,我已经成功构建了一个轮子并使用以下配置将其安装在 docker 映像上:
\npyproject.toml
[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"\nRun Code Online (Sandbox Code Playgroud)\n构建命令:
\npoetry build -f wheel\npoetry export -o dist/requirements.txt\nRun Code Online (Sandbox Code Playgroud)\nDocker 镜像:
\nFROM 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) 除了__init__.py文件之外,前导和尾随双下划线在文件名中是否有任何意义?例如,是否__model__.py比任何方式更重要model.py?
我曾经在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) 我一直在寻找各种开放源代码GitHub的Python项目一样,
http-prompt和Theano
我无法弄清楚它们的起点在哪里,以便可以优雅地调试它们。我需要查看每个文件中的__main__方法吗?
我来自Android背景;所以我在搜索相关内容,例如AndroidManifest.xml从哪里可以得到代码开始的地方的想法,但是我的尝试没有成功。
python ×8
debugging ×1
module ×1
pip ×1
pypi ×1
python-3.x ×1
python-wheel ×1
scripting ×1
setuptools ×1
shebang ×1