bad*_*der 5 python pip setuptools setup.py pycharm
我想了解什么是使用 setuptools 与“src/layout”的正确简约方法,以免除src.在导入中使用前缀的方式?
我已经阅读了大部分PyPA和setuptools文档(及其许多用例),但我无法理解什么是执行此示例的正确方法。
\n下面的布局重现了我想要实现的目标。我无法理解如何让第二个导入而不是第一个在mylibrary包的所有模块中工作:
from src.mylibrary.hello_word import hello_function # <- This works.\nfrom mylibrary.hello_word import hello_function # <- How to get this working?\n\nhello_function()\nRun Code Online (Sandbox Code Playgroud)\n使用此目录/文件结构:
\nC:\\MyProject\n\xe2\x94\x82\n\xe2\x94\x82 setup.py\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n \xe2\x94\x82\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80mylibrary\n \xe2\x94\x82 hello_word.py\n \xe2\x94\x82 module_two.py\n \xe2\x94\x82 __init__.py\n \xe2\x94\x82\nRun Code Online (Sandbox Code Playgroud)\n当我使用开发模式安装时pip install -e .,egg 目录将添加到上面的树中:
\xe2\x94\x82 (...)\n \xe2\x94\x82 \n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80mylibrary.egg-info\n dependency_links.txt\n PKG-INFO\n SOURCES.txt\n top_level.txt\nRun Code Online (Sandbox Code Playgroud)\n有了这个setup.py:
C:\\MyProject\n\xe2\x94\x82\n\xe2\x94\x82 setup.py\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n \xe2\x94\x82\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80mylibrary\n \xe2\x94\x82 hello_word.py\n \xe2\x94\x82 module_two.py\n \xe2\x94\x82 __init__.py\n \xe2\x94\x82\nRun Code Online (Sandbox Code Playgroud)\nhello_world.py我想在导入时不必编写的简单模块src.。
\xe2\x94\x82 (...)\n \xe2\x94\x82 \n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80mylibrary.egg-info\n dependency_links.txt\n PKG-INFO\n SOURCES.txt\n top_level.txt\nRun Code Online (Sandbox Code Playgroud)\n留空__init__.py。
我正在使用 venv,令我惊讶的是,egg 符号链接没有写入 venv,sitepackages而是写入C:\\Users\\Name\\AppData\\Roaming\\Python\\Python38\\site-packages...
Python 控制台指示mylibrary已找到包:
from setuptools import setup, find_packages, find_namespace_packages\n\nsetup(\n name=\'mylibrary\',\n version=\'0.1\',\n package_dir={\'\': \'src\'},\n # packages=find_namespace_packages(where=\'src\'), # <- I suppose this isn\'t the deciding factor.\n packages=find_packages(where=\'src\'),\n)\nRun Code Online (Sandbox Code Playgroud)\n
所描述的问题是由于必须在 PyCharm 终端内激活 venv造成的。
下面是您可能会遇到的场景的描述。(问题并不是立即显而易见,因为与终端不同,调试、运行等功能以无缝方式集成了 venv。)
需要注意的是:
在开发模式-v下安装时使用 verbose 标志可以提供pip和setuptools尝试执行的操作的线索。
决定性的pip消息基于您的写入权限site-packages,但是如果在终端上激活您的 venv,则无需更改任何默认权限。
如果您使用 1 个 venv,则会涉及 3 个不同的路径site-packages(注意路径)。
您可能会尝试的 3 个选项:
选项 1.以管理员身份运行PyCharm,从终端执行以下命令给出:
C:\MyProject>pip install -v -e .
Non-user install because site-packages writeable
(...)
Creating c:\program files\python38\lib\site-packages\mylibrary.egg-link (link to src)
Run Code Online (Sandbox Code Playgroud)
这将安装到site-packages(注意路径)您的基本 Python 安装中。您可能想要避免的事情,因为它会污染您的基础安装。
选项 2.以用户身份运行PyCharm。无需在终端上激活 venv。
C:\MyProject>pip install -v -e .
Defaulting to user installation because normal site-packages is not writeable
(...)
Creating c:\users\name\appdata\roaming\python\python38\site-packages\mylibrary.egg-link (link to src)
Run Code Online (Sandbox Code Playgroud)
这将安装到site-packages(注意路径)您的 venv 之外以及 Python 基本安装之外。您可能想要避免的事情,因为PyCharm在完成后将无法识别开发安装。
注意:终端中的消息“(...) site-packages is not writeable”是指site-packages您的 Python 基础安装中的。但是,如果没有显式激活 venv ,即使您将权限设置为可写,开发安装也不会写入您的 venv site-packages。
选项 3.以用户身份运行PyCharm。在终端上激活 venv。
C:\MyProject>pip install -v -e .
Defaulting to user installation because normal site-packages is not writeable
(...)
Creating c:\users\name\appdata\roaming\python\python38\site-packages\mylibrary.egg-link (link to src)
Run Code Online (Sandbox Code Playgroud)
您确实在您的 venv 中写入了此处site-packages,这可能就是您想要的。
| 归档时间: |
|
| 查看次数: |
1799 次 |
| 最近记录: |