<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>import &#8211; 编码无悔 /  Intent &amp; Focused</title>
	<atom:link href="https://www.codelast.com/tag/import/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.codelast.com</link>
	<description>最优化之路</description>
	<lastBuildDate>Mon, 27 Apr 2020 17:40:18 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>[原创] 小心PyCharm的import带来的unresolved reference误导</title>
		<link>https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%b0%8f%e5%bf%83pycharm%e5%9c%a8import%e4%b8%8a%e5%b8%a6%e6%9d%a5%e7%9a%84unresolved-reference%e8%af%af%e5%af%bc/</link>
					<comments>https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%b0%8f%e5%bf%83pycharm%e5%9c%a8import%e4%b8%8a%e5%b8%a6%e6%9d%a5%e7%9a%84unresolved-reference%e8%af%af%e5%af%bc/#respond</comments>
		
		<dc:creator><![CDATA[learnhard]]></dc:creator>
		<pubDate>Mon, 28 Oct 2019 13:31:27 +0000</pubDate>
				<category><![CDATA[原创]]></category>
		<category><![CDATA[综合]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[PyCharm]]></category>
		<category><![CDATA[unresolved reference]]></category>
		<guid isPermaLink="false">https://www.codelast.com/?p=10704</guid>

					<description><![CDATA[<p>
有时候你可能会遇到这样的故事：git clone一个Python的GitHub项目下来，配置好了对应的Anaconda环境，安装好了依赖的package，用PyCharm打开了项目，打开一个.py代码文件，发现PyCharm在文件开头几行就给标注了波浪线，提示unresolved reference XXX。而且，尽管PyCharm提示有错，你却可以运行代码。<br />
&#8220;我完全就是按项目要求的版本装的各种依赖包，怎么会找不到这个定义？&#8221;你心里可能会很不爽。<br />
这个时候，你要看清楚了，有可能是PyCharm给了你误导，其实你什么都做对了，只是PyCharm显示错了而已。<br />
<span id="more-10704"></span><br />
下面就举一个实际的例子。<br />
假设你安装了PyTorch 1.2.0。在一个自己写的代码文件中，有下面两句import：</p>
<pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'Droid Sans Mono';font-size:13.5pt;">
<span style="color:#cc7832;">from </span>torch.nn.parallel <span style="color:#cc7832;">import </span>DistributedDataParallel <span style="color:#cc7832;">as </span>DDP
<span style="color:#cc7832;">from </span>torch.nn.parallel <span style="color:#cc7832;">import </span>DistributedDataParallelCPU <span style="color:#cc7832;">as </span>DDPC</pre>
<p><span style="color: rgb(255, 255, 255);">文章来源：</span><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">https://www.codelast.com/</span></a><br />
你会发现，第1行没问题，第2行被PyCharm标注了波浪线，提示&#160;unresolved reference XXX，意思就是&#160;DistributedDataParallelCPU 找不到。<br />
所以PyTorch 1.2.0里面真的没有 DistributedDataParallelCPU 吗？你可以去网上搜，也可以简单地用下面的方法检查一下：<br />
既然 DistributedDataParallel 这里不提示错误，而且从名字上看，DistributedDataParallel 和&#160;DistributedDataParallelCPU 是有关联的，因此，在PyCharm里先按住Ctrl键(Linux下)，再用鼠标点击 DistributedDataParallel，即可打开它的代码 distributed.py，然后用快捷键Alt+F5(Linux下)调出&#8220;<span style="color:#0000ff;">Select In</span>&#8221;菜单：<br />
<img decoding="async" alt="" src="https://www.codelast.com/wp-content/uploads/ckfinder/images/pycharm_select_in.png" style="width: 600px; height: 257px;" /></p>
<p>选择菜单里的&#8220;<span style="color:#0000ff;">Project View</span>&#8221;，回车，PyCharm会定位到该文件所在的目录：<br />
<img decoding="async" alt="" src="https://www.codelast.com/wp-content/uploads/ckfinder/images/pycharm_project_view.png" style="width: 280px; height: 731px;" /></p>
<p>双击 parallel 这个package下的&#160;__init__.py&#8230; <a href="https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%b0%8f%e5%bf%83pycharm%e5%9c%a8import%e4%b8%8a%e5%b8%a6%e6%9d%a5%e7%9a%84unresolved-reference%e8%af%af%e5%af%bc/" class="read-more">Read More </a></p>]]></description>
										<content:encoded><![CDATA[<p>
有时候你可能会遇到这样的故事：git clone一个Python的GitHub项目下来，配置好了对应的Anaconda环境，安装好了依赖的package，用PyCharm打开了项目，打开一个.py代码文件，发现PyCharm在文件开头几行就给标注了波浪线，提示unresolved reference XXX。而且，尽管PyCharm提示有错，你却可以运行代码。<br />
&ldquo;我完全就是按项目要求的版本装的各种依赖包，怎么会找不到这个定义？&rdquo;你心里可能会很不爽。<br />
这个时候，你要看清楚了，有可能是PyCharm给了你误导，其实你什么都做对了，只是PyCharm显示错了而已。<br />
<span id="more-10704"></span><br />
下面就举一个实际的例子。<br />
假设你安装了PyTorch 1.2.0。在一个自己写的代码文件中，有下面两句import：</p>
<pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'Droid Sans Mono';font-size:13.5pt;">
<span style="color:#cc7832;">from </span>torch.nn.parallel <span style="color:#cc7832;">import </span>DistributedDataParallel <span style="color:#cc7832;">as </span>DDP
<span style="color:#cc7832;">from </span>torch.nn.parallel <span style="color:#cc7832;">import </span>DistributedDataParallelCPU <span style="color:#cc7832;">as </span>DDPC</pre>
<p><span style="color: rgb(255, 255, 255);">文章来源：</span><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">https://www.codelast.com/</span></a><br />
你会发现，第1行没问题，第2行被PyCharm标注了波浪线，提示&nbsp;unresolved reference XXX，意思就是&nbsp;DistributedDataParallelCPU 找不到。<br />
所以PyTorch 1.2.0里面真的没有 DistributedDataParallelCPU 吗？你可以去网上搜，也可以简单地用下面的方法检查一下：<br />
既然 DistributedDataParallel 这里不提示错误，而且从名字上看，DistributedDataParallel 和&nbsp;DistributedDataParallelCPU 是有关联的，因此，在PyCharm里先按住Ctrl键(Linux下)，再用鼠标点击 DistributedDataParallel，即可打开它的代码 distributed.py，然后用快捷键Alt+F5(Linux下)调出&ldquo;<span style="color:#0000ff;">Select In</span>&rdquo;菜单：<br />
<img decoding="async" alt="" src="https://www.codelast.com/wp-content/uploads/ckfinder/images/pycharm_select_in.png" style="width: 600px; height: 257px;" /></p>
<p>选择菜单里的&ldquo;<span style="color:#0000ff;">Project View</span>&rdquo;，回车，PyCharm会定位到该文件所在的目录：<br />
<img decoding="async" alt="" src="https://www.codelast.com/wp-content/uploads/ckfinder/images/pycharm_project_view.png" style="width: 280px; height: 731px;" /></p>
<p>双击 parallel 这个package下的&nbsp;__init__.py 文件，看看里面写了什么：</p>
<pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'Droid Sans Mono';font-size:13.5pt;">
<span style="color:#cc7832;">from </span>.parallel_apply <span style="color:#cc7832;">import </span>parallel_apply
<span style="color:#cc7832;">from </span>.replicate <span style="color:#cc7832;">import </span>replicate
<span style="color:#cc7832;">from </span>.data_parallel <span style="color:#cc7832;">import </span>DataParallel<span style="color:#cc7832;">, </span>data_parallel
<span style="color:#cc7832;">from </span>.scatter_gather <span style="color:#cc7832;">import </span>scatter<span style="color:#cc7832;">, </span>gather
<span style="color:#cc7832;">from </span>.distributed <span style="color:#cc7832;">import </span>DistributedDataParallel

__all__ = [<span style="color:#6a8759;">&#39;replicate&#39;</span><span style="color:#cc7832;">, </span><span style="color:#6a8759;">&#39;scatter&#39;</span><span style="color:#cc7832;">, </span><span style="color:#6a8759;">&#39;parallel_apply&#39;</span><span style="color:#cc7832;">, </span><span style="color:#6a8759;">&#39;gather&#39;</span><span style="color:#cc7832;">, </span><span style="color:#6a8759;">&#39;data_parallel&#39;</span><span style="color:#cc7832;">,
</span><span style="color:#cc7832;">           </span><span style="color:#6a8759;">&#39;DataParallel&#39;</span><span style="color:#cc7832;">, </span><span style="color:#6a8759;">&#39;DistributedDataParallel&#39;</span>]

<span style="color:#cc7832;">def </span><span style="color:#ffc66d;">DistributedDataParallelCPU</span>(*args<span style="color:#cc7832;">, </span>**kwargs):
    <span style="color:#cc7832;">import </span>warnings
    warnings.warn(<span style="color:#6a8759;">&quot;torch.nn.parallel.DistributedDataParallelCPU is deprecated, &quot;
</span><span style="color:#6a8759;">                  &quot;please use torch.nn.parallel.DistributedDataParallel instead.&quot;</span>)
    <span style="color:#cc7832;">return </span>DistributedDataParallel(*args<span style="color:#cc7832;">, </span>**kwargs)
</pre>
<p><span style="color: rgb(255, 255, 255);">文章来源：</span><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">https://www.codelast.com/</span></a><br />
在这个文件中，你会看到一个名为 <span style="color:#ff0000;">__all__</span> 的list，以及在外面 import 的时候提示 unresolved reference 的&nbsp;DistributedDataParallelCPU，果然它是真的存在的，只不过已经被警告deprecated了，而且它直接返回的就是&nbsp;DistributedDataParallel。</p>
<p>那么 <span style="color:#ff0000;">__all__</span> 这个list又是什么，为什么在外面 import DistributedDataParallel 可以，import&nbsp;DistributedDataParallelCPU 却提示&nbsp;unresolved reference？<br />
<span style="color:#ff0000;">__all__</span> 是由字符串元素组成的，它定义了当你使用 <span style="color:#b22222;">from &lt;module&gt; import *</span> 导入某个模块的时候能导出的符号（variable，method，class等），<span style="color:#ff0000;">__all__</span> 只会影响 <span style="color:#b22222;">from &lt;module&gt; import *</span> 这种导入方式，对于 <span style="color:#0000ff;">from &lt;module&gt; import &lt;member&gt;</span> 导入方式并没有影响，仍然可以从外部导入。<br />
所以其实外部代码里的&nbsp;<span style="color:#0000ff;">from torch.nn.parallel import DistributedDataParallelCPU as DDPC</span> 没有错，不要被PyCharm误导了。我测试了一下，同样的代码，在VSCode里，启用&ldquo;Python extension for Visual Studio Code&rdquo;插件后，它能识别出来PyCharm认为有错的那个import，点击它能跳到正确的source里。</p>
<p><span style="color: rgb(255, 255, 255);">文章来源：</span><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">https://www.codelast.com/</span></a><br />
<span style="color: rgb(255, 0, 0);">➤➤</span>&nbsp;版权声明&nbsp;<span style="color: rgb(255, 0, 0);">➤➤</span>&nbsp;<br />
转载需注明出处：<u><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><em><span style="color: rgb(0, 0, 255);"><strong style="font-size: 16px;"><span style="font-family: arial, helvetica, sans-serif;">codelast.com</span></strong></span></em></a></u>&nbsp;<br />
感谢关注我的微信公众号（微信扫一扫）：</p>
<p style="border: 0px; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px; color: rgb(77, 77, 77);">
	<img decoding="async" alt="wechat qrcode of codelast" src="https://www.codelast.com/codelast_wechat_qr_code.jpg" style="width: 200px; height: 200px;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%b0%8f%e5%bf%83pycharm%e5%9c%a8import%e4%b8%8a%e5%b8%a6%e6%9d%a5%e7%9a%84unresolved-reference%e8%af%af%e5%af%bc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
